Python in Action
环境配置 (Python3.8)
#!/bin/bash
# Download Python
if ! wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz; then
echo "Error: Failed to download Python"
exit 1
fi
# Extract the archive
if ! tar xvf Python-3.8.12.tgz; then
echo "Error: Failed to extract the tarball"
exit 1
fi
# Enter the extracted directory
cd Python-3.8.12 || { echo "Error: Failed to enter the extracted directory"; exit 1; }
# Configure the build
if ! ./configure; then
echo "Error: Failed to configure the build"
exit 1
fi
# Get the number of CPU cores
num_cores=$(nproc)
# Build Python
if ! make -j"${num_cores}"; then
echo "Error: Failed to build Python"
exit 1
fi
# Check if the user has root privileges before installing
if [ "$(id -u)" != "0" ]; then
echo "Error: Installation requires root privileges" 1>&2
exit 1
fi
# Install Python
if ! make install; then
echo "Error: Failed to install Python"
exit 1
fi
# Create a soft link for Python
if ! ln -sf /usr/local/bin/python3.8 /bin/python; then
echo "Error: Failed to create a soft link for Python"
exit 1
fi
# Print the installed Python version
python --version
$ python --version
Python 3.8.12
$ which python
/usr/bin/python
安装 pip:
python -m pip install --upgrade pip
安装 module 依赖:例如,xxhash
/usr/local/bin/pip install xxhash
# or
python3 -m pip install xxhash
Tips
指定使用的 Python 版本 (shebang)
在 Python 脚本中指定使用的 Python 版本,可以通过在脚本文件的开头添加 shebang 行来实现。shebang 行是一个以 #!
开头的特殊注释行,用于指定脚本文件的解释器。
例如,如果我们想要在 Python 3 中运行脚本,可以在脚本文件的开头添加以下 shebang 行:
#!/usr/bin/env python3
这行代码告诉操作系统,使用 /usr/bin/env
命令来查找 Python 3 的解释器,并将该解释器用于执行脚本文件。如果系统中安装了多个 Python 版本,这种方式可以自动选择最新的 Python 3 版本。
如果我们想要在 Python 2 中运行脚本,可以使用以下 shebang 行:
#!/usr/bin/env python2
需要注意的是,不同的操作系统可能支持的 shebang 行格式不同。在 Linux 和 macOS 等类 Unix 系统中,shebang 行的格式为 #!interpreter [optional-arg]
,其中 interpreter
是解释器的路径,optional-arg
是传递给解释器的可选参数。在 Windows 系统中,shebang 行的格式为 #!python
,其中 python
是解释器的名称。因此,在编写跨平台的 Python 脚本时,需要注意 shebang 行的格式。
错误定位
参考:How to catch and print the full exception traceback without halting/exiting the program?
traceback.format_exc()
or sys.exc_info()
will yield more info if that’s what you want.
import traceback
import sys
try:
do_stuff()
except Exception:
print(traceback.format_exc())
# or
print(sys.exc_info()[2])
Q&A
Use isinstance to test for Unicode string
Test for str
:
isinstance(unicode_or_bytestring, str)
or, if you must handle bytestrings, test for bytes
separately:
isinstance(unicode_or_bytestring, bytes)
Error: ‘dict’ object has no attribute ‘iteritems’
Take a look at Python 3.0 Wiki Built-in Changes section, where it is stated:
Removed dict.iteritems(), dict.iterkeys(), and dict.itervalues().
Instead: use dict.items(), dict.keys(), and dict.values() respectively.