2012-04-17 10 views
42

È possibile compilare Python in vari modi. Mi piacerebbe scoprire con quali opzioni è stato compilato il mio Python.Come ottenere l'elenco delle opzioni con cui è stato compilato Python?

Caso di utilizzo concreto: il mio Python è stato compilato con readline? So che posso vedere questo facendo "import readline", ma mi piacerebbe vedere un elenco di impostazioni di compilazione per il mio binario Python.

Modifica: Intendo l'eseguibile Python e il codice sorgente non scritto da me stesso.

+0

In genere non è lavorare con bytecode pitone compilato - normalmente si lavora con i file sorgente Python. Questo non ha molto senso, potresti dare qualche altro contesto? –

+1

Lattyware: Penso che l'OP significasse come l'eseguibile di Python è stato compilato, non il bytecode dei moduli – sinelaw

+0

sinelaw è corretto, intendevo l'eseguibile Python, aggiunto per chiarezza –

risposta

43

C'è un modulo per vedere la configurazione del sistema

import sysconfig 
print(sysconfig.get_config_vars()) 

Offre un'interfaccia per ottenere le variabili individuali come bene.

sysconfig.get_config_var('HAVE_LIBREADLINE') 

Edit:

prima python2.7, è necessario utilizzare

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

Sto usando python 2.7. Funziona anche lì. – mirk

+0

(accidentalmente cancellato il mio commento originale) Funziona su 3.2 e versioni successive (in python 3) o, apparentemente su 2.7 e versioni successive (in python 2). Non sembra funzionare sul mio 2.6.7 – sinelaw

+0

grazie, ho aggiornato la risposta per le versioni precedenti di python. – mirk

21

Per costruire sulla risposta di mirk, per trovare le bandiere di configurazione che sono stati effettivamente utilizzati durante la costruzione, il valore che stai cercando è CONFIG_ARGS.

Per esempio, questo è l'uscita di un Python Ubuntu-compilato:

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

E un altro modo per farlo ... Python fornisce gli script per versione installata ...

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 

Le risposte di uno dei miei sistemi sono:

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

Quindi, se è necessario impostare i valori per bash scr ipts e simili, questi sono disponibili con questa utility da riga di comando.

-2

per ottenere l'elenco di opzioni che PyPy è stato compilato con, eseguire

pypy --info 
+0

Questa non era la mia domanda. –

Problemi correlati