2. 在类Unix环境下使用Python

2.1. 获得并安装Python的最新版本

2.1.1. 在Linux中

Python 预装在大多数 Linux 发行版上,并在它们以外的发行版上以软件包的形式提供。 不过在你所用的发行版的软件包中可能没有某些你需要使用的功能。 这时你可以用源代码来编译最新版本的 Python。

对于最新版本的 Python 未预装也不在软件仓库中的情况,你可以为你的发行版制作软件包。 请参阅下面的链接:

参见

2.1.2. 在FreeBSD和OpenBSD上

  • FreeBSD用户,使用以下命令添加包:
  1. pkg install python3
  • OpenBSD用户,使用以下命令添加包:
  1. pkg_add -r python
  2.  
  3. pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/<insert your architecture here>/python-<version>.tgz

例如:i386用户获取Python 2.5.1的可用版本:

  1. pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/python-2.5.1p2.tgz

2.2. 构建Python

如果你想自己编译 CPython,首先要做的是获取 源代码 [https://www.python.org/downloads/source/]。 你可以下载最新发布版的 source 或是直接抓取最新的 clone [https://devguide.python.org/setup/#get-the-source-code]。 (如果你想要贡献补丁,那么你就必须先 clone。)

构建过程由常用命令组成:

  1. ./configure
  2. make
  3. make install

特定 Unix 平台的 配置选项 和注意事项通常会详细地记录在 Python 源代码树的根目录下的 README.rst [https://github.com/python/cpython/tree/3.13/README.rst] 文件中。

警告

make install 可以覆盖或伪装 python3 二进制文件。因此,建议使用 make altinstall 而不是 make install ,因为后者只安装了 exec_prefix/bin/pythonversion

2.3. 与Python相关的路径和文件

这些取决于本机安装惯例的不同;prefixexec_prefix 依赖于具体安装并且应当被解读为针对 GNU 软件;它们可能具有相同的含义。

例如,在大多数Linux系统上,两者的默认值是 /usr

文件/目录 含意
exec_prefix/bin/python3 解释器的推荐位置
prefix/lib/pythonversion, exec_prefix/lib/pythonversion 包含标准模块的目录的推荐位置
prefix/include/pythonversion, exec_prefix/include/pythonversion 包含开发Python扩展和嵌入解释器所需的include文件的目录的推荐位置

2.4. 杂项

要在Unix上使用Python脚本,需要添加可执行权限,例如:

  1. $ chmod +x script

并在脚本的顶部放置一个合适的Shebang线。一个很好的选择通常是:

  1. #!usrbin/env python3

将在整个 PATH 中搜索Python解释器。但是,某些Unix系统可能没有 env 命令,因此可能需要将 usrbin/python3 硬编码为解释器路径。

要在Python脚本中使用shell命令,请查看 subprocess 模块。

2.5. 自定义 OpenSSL

  • 要使用发行商的 OpenSSL 配置和系统信任存储库,请找到包含 openssl.cnf 文件或符号链接的目录,它位于 /etc 中。 在大多数发行版上该文件是在 etcssl 或者 etcpki/tls 中。 该目录还应当包含一个 cert.pem 文件和/或一个 certs 目录。
  1. $ find etc -name openssl.cnf -printf "%h\n"
  2. etcssl
  • 下载、编译并安装 OpenSSL。 请确保你使用 install_sw 而不是 installinstall_sw 的目标不会覆盖 openssl.cnf
  1. $ curl -O https://www.openssl.org/source/openssl-VERSION.tar.gz
  2. $ tar xzf openssl-VERSION
  3. $ pushd openssl-VERSION
  4. $ ./config \ --prefix=usrlocal/custom-openssl \ --libdir=lib \ --openssldir=etcssl
  5. $ make -j1 depend
  6. $ make -j8
  7. $ make install_sw
  8. $ popd
  • 使用自定义的 OpenSSL 编译 Python (参考配置 --with-openssl--with-openssl-rpath 选项)
  1. $ pushd python3.x.x
  2. $ ./configure -C \ --with-openssl=usrlocal/custom-openssl \ --with-openssl-rpath=auto \ --prefix=usrlocal/python3.x.x
  3. $ make -j8
  4. $ make altinstall

备注

OpenSSL 的补丁发布版具有向下兼容的 ABI。 你不需要重新编译 Python 来更新 OpenSSL。 使用一个新的版本来替代自定义 OpenSSL 安装版就可以了。