Jak uzyskać listę opcji, z którymi skompilowano Pythona?

Można kompilować Pythona na różne sposoby. Chciałbym się dowiedzieć, z jakimi opcjami został skompilowany mój Python.

Konkretny przypadek użycia: czy mój Python został skompilowany z readline? Wiem, że mogę to zobaczyć, wykonując "import readline", ale chciałbym zobaczyć listę ustawień kompilacji dla mojego binarnego Pythona.

Edytuj: Mam na myśli program wykonywalny Pythona i , a nie kod źródłowy napisany przeze mnie.

Author: Niels Bom, 2012-04-17

5 answers

Istnieje moduł, aby zobaczyć konfigurację systemu

import sysconfig
print(sysconfig.get_config_vars())

Oferuje interfejs, aby uzyskać indywidualne zmienne, jak również.

sysconfig.get_config_var('HAVE_LIBREADLINE')

Edit:

Przed python2. 7, musisz użyć

import distutils.sysconfig
print distutils.sysconfig.get_config_vars()
 47
Author: mirk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-04 10:09:53

Aby zbudować na podstawie odpowiedzi Mirka, aby znaleźć flagi configure, które zostały faktycznie użyte podczas budowania, wartość, której szukasz, to CONFIG_ARGS.

Na przykład, jest to wyjście dla Pythona skompilowanego Ubuntu:

>>> 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'
 22
Author: Mike Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-22 22:39:17

I inny sposób... Python dostarcza Skrypty na zainstalowaną wersję...

  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

Odpowiedzi z jednego z moich Systemów to:

--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

Więc jeśli potrzebujesz ustawić wartości dla skryptów bash i takich, Są one dostępne za pomocą tego narzędzia wiersza poleceń.

 8
Author: Shenme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-30 21:43:09

Oto polecenie, którego używam do porównywania różnych konfiguracji Pythona. Obejmuje uzyskanie wartości wyjść:

$ 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
 1
Author: Joe Linoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-01 01:17:34

Aby uzyskać listę opcji, z którymi PyPy została skompilowana, Uruchom

pypy --info
 -1
Author: Rockallite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-24 11:41:17