2012-04-17 6 views
42

Sie können Python auf verschiedene Arten kompilieren. Ich möchte herausfinden, mit welchen Optionen mein Python kompiliert wurde.Wie erhalte ich die Liste der Optionen, mit denen Python kompiliert wurde?

Konkreter Anwendungsfall: Wurde mein Python mit readline kompiliert? Ich weiß, ich kann dies sehen, indem ich "readline importieren", aber ich würde gerne eine Liste der Kompilierungseinstellungen für meine Python-Binärdatei sehen.

Edit: Ich meine die ausführbare Python und nicht Quellcode von mir geschrieben.

+0

Sie im Allgemeinen nicht mit kompiliert Python-Bytecode arbeiten - in der Regel arbeiten Sie mit Dateien Python-Quelle. Das ergibt nicht wirklich viel Sinn, könnten Sie etwas mehr Kontext geben? –

+1

Lattyware: Ich denke, das OP bedeutete, wie Python ausführbare Datei kompiliert wurde, nicht der Bytecode von Modulen – sinelaw

+0

sinelaw ist korrekt, ich meinte die Python-Programmdatei, zur besseren Übersicht hinzugefügt –

Antwort

43

Es ist ein Modul, das System Config

import sysconfig 
print(sysconfig.get_config_vars()) 

Es bietet eine Schnittstelle zu sehen, wie gut einzelne Variablen zu erhalten.

sysconfig.get_config_var('HAVE_LIBREADLINE') 

Edit:

vor python2.7, haben Sie

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

Ich benutze Python 2.7. Es funktioniert auch dort. – mirk

+0

(versehentlich meinen ursprünglichen Kommentar gelöscht) Dies funktioniert auf 3.2 und höher (in Python 3) oder anscheinend auf 2.7 und höher (in Python 2). Scheint nicht auf meinem 2.6.7 – sinelaw

+0

Dank zu arbeiten, habe ich die Antwort für frühere Python-Versionen aktualisiert. – mirk

21

zu verwenden, um auf mirk Antwort zu erstellen, die configure-Flags zu finden, die tatsächlich während des Build verwendet wurden, um den Wert Sie suchen nach CONFIG_ARGS.

Zum Beispiel ist dies die Ausgabe für eine Python Ubuntu-zusammengestellt:

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

Und eine andere Art und Weise, es zu tun ... Python liefert Skripte pro installierte Version ...

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 

Die Antworten von einem meiner Systeme sind:

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

Also, wenn Sie Einstellungen für bash scr benötigen In diesem Befehlszeilendienstprogramm sind diese Informationen verfügbar.

-2

Um die Liste der Optionen, die PyPy mit kompiliert wurde, laufen

pypy --info 
+0

Das war nicht meine Frage. –