Linux/Unix 环境下的 Python 编译

Python · 昨天

在 UNIX/Linux 环境下编译 Python 较为简单,主要分为两个步骤:

  1. 环境准备(准备 Python 所依赖的必要环境)
  2. 编译、安装

环境准备

常规操作系统中

编译 Python 前通常需要在系统上安装以下库:

  • gcc 编译工具
  • zlib 压缩、解压相关库
  • libffi Python 所以来的用于支持 C 扩展的库
  • openssl 安全套接字层密码库,Linux 中通常已具备

对于 Debian/Ubuntu,执行:

apt install -y zlib1g zlib1g-dev libffi-dev openssl libssl-dev gcc make

对于 RedHat/CentOS/Fedora,执行:

yum install -y zlib zlib-devel libffi-devel openssl openssl-devel gcc make

对于 macOS,执行:

xcode-select --install

编译、安装

若您希望将 Python 安装在特定目录,则需要在一开始修改 configure 命令为:

./configure --prefix=<Python要安装到的目录(绝对路径)>

在Python的 ./configure 脚本中,常用的–enable参数及其含义如下:

  • --enable-ipv6: 启用IPv6支持。
  • --enable-unicode=ucs4: 启用UCS-4编码的Unicode支持。
  • --enable-shared: 启用共享库的构建。
  • --enable-optimizations: 启用优化,对Python进行一些优化以提高性能。
  • --enable-openssl: 启用OpenSSL支持。
  • --enable-threads: 启用多线程支持。
  • --enable-ssl-default-suites: 启用默认的SSL密码套件。

常用的–with参数及其含义如下:

  • --with-threads: 指定线程库的类型,例如--with-threads=pthread。
  • --with-dbmliborder: 指定数据库访问库的优先顺序,例如-–with-dbmliborder=gdbm:ndbm。
  • --with-computed-gotos: 启用computed goto优化。
  • --with-ensurepip: 指定ensurepip模块的安装方式,例如--with-ensurepip=upgrade。
  • --with-system-expat: 使用系统安装的expat库。
  • --with-openssl: 指定OpenSSL库的路径,例如–-with-openssl=/usr/local/ssl。

进入 Python 源码根目录,执行以下命令:

make
make install

在指定目录中:

  • bin/ 存放的是可执行文件
  • include/ 存放的是 Python 源码的头文件
  • lib/ 存放的是 Python 标准库

    • lib/python3.7/config-3.7m-{platform} 存放的是 libpython3.7m.a,该静态库用于使用 C 语言进行扩展。{platform} 代表平台,比如在 Mac OS 上为 “darwin”,在 Linux 上为 “x86_64-linux-gnu”
    • share/ 存放的是帮助等文件

默认情况下,编译的 Python 是静态链接(libpython3.7m.a)。如果希望编译的 Python 是动态链接(libpython3.7m.so),则需要在一开始修改configure 命令为:

./configure --enable-shared

如需重新编译,请首先执行:

make clean

再执行本节开头处的命令即可。

Theme Jasmine by Kent Liao