如何获得用于编译 Python 的选项列表?

您可以通过各种方式编译 Python。

具体用例: 我的 Python 是用 readline 编译的吗? 我知道通过“ import readline”可以看到这一点,但是我希望看到 Python 二进制文件的编译设置列表。

编辑: 我指的是自己编写的 Python 可执行文件和 没有源代码。

34246 次浏览

有一个模块可以查看系统配置

import sysconfig
print(sysconfig.get_config_vars())

它还提供了获取单个变量的接口。

sysconfig.get_config_var('HAVE_LIBREADLINE')

它也可以通过 shell 访问:

python3 -m sysconfig | less

编辑:

在 python2.7之前,必须使用

import distutils.sysconfig
print distutils.sysconfig.get_config_vars()

要在 mirk 的答案基础上构建,要找到构建过程中实际使用的 configure 标志,需要查找的值是 CONFIG_ARGS

例如,这是 Ubuntu 编译的 Python 的输出:

>>> print distutils.sysconfig.get_config_var('CONFIG_ARGS')
'--enable-shared' '--prefix=/usr' '--enable-ipv6'
'--enable-unicode=ucs4' '--with-dbmliborder=bdb:gdbm'
'--with-system-expat' '--with-system-ffi' '--with-fpe ctl'
'CC=x86_64-linux-gnu-gcc' 'CFLAGS=-D_FORTIFY_SOURCE=2 -g
-fstack-protector --param=ssp-buffer-size=4 -Wformat
-Werror=format-security ' 'LDFLAGS=-Wl,-Bs ymbolic-functions
-Wl,-z,relro'

另一种方法是... Python 提供每个安装版本的脚本..。

  ls -l /usr/bin/python*config*
16 Dec 21  2013 /usr/bin/python-config     -> python2.7-config
16 Dec 21  2013 /usr/bin/python2-config    -> python2.7-config
33 Mar 22 18:57 /usr/bin/python2.7-config  -> x86_64-linux-gnu-python2.7-config
16 Mar 23 03:17 /usr/bin/python3-config    -> python3.4-config
33 Apr 11 09:15 /usr/bin/python3.4-config  -> x86_64-linux-gnu-python3.4-config
34 Apr 11 09:15 /usr/bin/python3.4m-config -> x86_64-linux-gnu-python3.4m-config
17 Mar 23 03:17 /usr/bin/python3m-config   -> python3.4m-config


python3-config --help
Usage: /usr/bin/python3-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir


python3-config --prefix
/usr

我的一个系统给出的答案是:

--prefix           /usr
--exec-prefix      /usr
--includes         -I/usr/include/python3.4m -I/usr/include/python3.4m
--libs             -lpthread -ldl  -lutil -lm  -lpython3.4m
--cflags           -I/usr/include/python3.4m -I/usr/include/python3.4m  -Wno-unused-result -Werror=declaration-after-statement -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security  -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
--ldflags          -L/usr/lib/python3.4/config-3.4m-x86_64-linux-gnu -L/usr/lib -lpthread -ldl  -lutil -lm  -lpython3.4m -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions
--extension-suffix @SO@
--abiflags         m
--configdir        /usr/lib/python3.4/config-3.4m-x86_64-linux-gnu

因此,如果您需要为 bash 脚本设置值等,可以通过此命令行实用程序使用这些值。

(仅供参考)

顺便说一下,要获得编译 PyPy时使用的选项列表,请运行

pypy --info

下面是我用来比较不同 python 配置的命令,包括获取输出值:

$ python3.6 -c "import sysconfig;print('{}'.format('\n'.join(['{} = {}'.format(v, sysconfig.get_config_var(v)) for v in sorted(sysconfig.get_config_vars(), key=lambda s: s.lower())])))" > /tmp/python36.conf


$ python2.7 -c "import sysconfig;print('{}'.format('\n'.join(['{} = {}'.format(v, sysconfig.get_config_var(v)) for v in sorted(sysconfig.get_config_vars(), key=lambda s: s.lower())])))" > /tmp/python27.conf


$ sdiff /tmp/python36.conf /tmp/python27.conf


$ # This is my own version of colorized side-by-side diff from
$ # https://github.com/jlinoff/csdiff
$ csdiff /tmp/python36.conf /tmp/python27.conf