在 UNIX/Linux 环境下编译 Python 较为简单,主要分为两个步骤:
- 环境准备(准备 Python 所依赖的必要环境)
- 编译、安装
环境准备
常规操作系统中
编译 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
再执行本节开头处的命令即可。