Вопрос по python – Как получить список параметров, с которыми Python был скомпилирован?

54

Вы можете компилировать Python различными способами. Я хотел бы узнать, с какими опциями был скомпилирован мой Python.

Конкретный вариант использования: был ли мой Python скомпилирован с readline? Я знаю, что могу увидеть это, выполнив команду «import readline», но мне бы хотелось увидеть список параметров компиляции для моего двоичного файла Python.

Редактировать: Я имею в виду исполняемый файл Python иnot Исходный код написан мной.

sinelaw правильный, я имел в виду исполняемый файл Python, добавленный для ясности Niels Bom
Обычно вы не работаете с скомпилированным байт-кодом Python - обычно вы работаете с исходными файлами Python. Это не имеет большого смысла, не могли бы вы дать больше контекста? Gareth Latty
Lattyware: я думаю, что OP имел в виду, как был скомпилирован исполняемый файл python, а не байт-код модулей sinelaw

Ваш Ответ

5   ответов
-1

Чтобы получить список опций, которыеPyPy был скомпилирован, запустить

pypy --info
Это был не мой вопрос. Niels Bom
52

import sysconfig
print(sysconfig.get_config_vars())

Он также предлагает интерфейс для получения отдельных переменных.

sysconfig.get_config_var('HAVE_LIBREADLINE')

Редактировать:

до Python2.7, вы должны использовать

import distutils.sysconfig
print distutils.sysconfig.get_config_vars()
(случайно удалил мой оригинальный комментарий) Это работает на 3.2 и выше (в python 3) или, по-видимому, на 2.7 и выше (в python 2). Кажется, это не работает на моем 2.6.7
Я использую Python 2.7. Там тоже работает.
спасибо, я обновил ответ для более ранних python-версий.
24

найти флаги конфигурации, которые фактически использовались во время сборки, вы ищете значение: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'
2

которую я использую для сравнения различных конфигураций 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
8

ановленной версии ...

  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 @[email protected]
--abiflags         m
--configdir        /usr/lib/python3.4/config-3.4m-x86_64-linux-gnu

Так что если вам нужны значения настроек для скриптов bash и тому подобное, они доступны с помощью этой утилиты командной строки.

Это не делает то, что запрашивал OP («список опций, с которыми Python был скомпилирован»). Согласно его man-странице, он вместо этого "выведет параметры сборки для расширений Python C / C ++ или встраивания". Параметры, необходимые для создания программного обеспечения, совместимого с данным интерпретатором Python, не обязательно совпадают с параметрами, используемыми для создания этого интерпретатора. Более того, они часто существенно различаются. Например, в этом случае ваш интерпретатор Python был почти навернякаnot построено с помощью & quot; -I / usr / include / python3.4m & quot ;.

Похожие вопросы