Comment obtenir la liste des options avec lesquelles Python a été compilé?

Vous pouvez comstackr Python de différentes manières. Je voudrais savoir avec quelles options mon Python a été compilé.

Cas d’utilisation concret: mon Python a-t-il été compilé avec readline? Je sais que je peux voir cela en faisant “import readline”, mais j’aimerais voir une liste des parameters de compilation pour mon binary Python.

Edit: je veux dire l’exécutable Python et non le code source écrit par moi-même.

Il y a un module pour voir la configuration du système

import sysconfig print(sysconfig.get_config_vars()) 

Il offre une interface pour obtenir également des variables individuelles.

 sysconfig.get_config_var('HAVE_LIBREADLINE') 

Modifier:

avant python2.7, vous devez utiliser

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

Pour construire la réponse de mirk, pour trouver les indicateurs de configuration qui ont été réellement utilisés lors de la construction, la valeur que vous recherchez est CONFIG_ARGS .

Par exemple, ceci est la sortie d’un Python compilé par 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' 

Et une autre façon de le faire … Python fournit des scripts par version installée …

  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 

Les réponses de l’un de mes systèmes sont les suivantes:

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

Donc, si vous avez besoin de valeurs de parameters pour les scripts bash et autres, ils sont disponibles avec cet utilitaire de ligne de commande.

Voici une commande que j’utilise pour comparer différentes configurations de python. Cela comprend l’obtention de la valeur des sorties:

 $ 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 

Pour obtenir la liste des options avec lesquelles PyPy a été compilé, exécutez

 pypy --info