2013-12-14 3 views
9

Sotto le versioni più recenti di Ubuntu/Debian, libpython2.7.so è sotto /usr/lib/i386-linux-gnu/libpython2.7.so o /usr/lib/x86_64-linux-gnu/libpython2.7.so, ecc In precedenza, potrebbero essere trovati in /usr/lib/libpython2.7.so, non importa l'architettura. Non ho controllato altre distribuzioni. Come trovo il percorso di libpython2.7.so con python?Distribuzione percorso libpython indipendente

+0

Siete alla ricerca di 'individuare libpython' o qualcos'altro? – janos

+0

cosa ti mostra 'ldd/usr/local/bin/python'? – Arovit

+0

'locate libpython' trova molto più di questo singolo file, e voglio trovare il percorso a livello di codice e fornirlo a cmake. 'ldd/usr/local/bin/python' restituisce' Nessun file o directory ', e 'ldd/usr/bin/python' fornisce diversi file di libreria, ma' libpython2.7.so' non è uno di questi. – Psirus

risposta

0

Suppongo che tu stia cercando di collegarti a questo file. Python viene solitamente installato con informazioni pkgconfig per aiutare a compilare contro di esso. In particolare per il file .so, è necessario utilizzare pkg-config --libs python-2.7. Da Python:

import subprocess 
subprocess.check_output(["pkg-config", "--libs", "python-2.7"]) 

Se l'unica bandiera mostrata è -lpython2.7, si potrebbe prendere in considerazione la lettura /etc/ld.so.conf vedere percorsi predefiniti, in cui il linker cerca la sua librerie.

7

L'utilizzo di pkg-config non è l'opzione migliore: non consente di distinguere tra le diverse installazioni di Python, restituendo solo l'installazione del sistema. È meglio usare l'eseguibile Python per scoprire la posizione di libpythonX.Y.so.

Dall'interno Python:

from distutils import sysconfig; 
    print sysconfig.get_config_var("LIBDIR") 

o all'interno di un Makefile:

PYTHON_LIBDIR:=$(shell python -c 'from distutils import sysconfig; print sysconfig.get_config_var("LIBDIR")') 

Ciò scoprire la posizione da qualsiasi eseguibile Python è il primo in $PATH e quindi funzionerà se ci sono più installazioni di Python sul sistema.

Credito a Niall Fitzgerald per indicare questo fuori.

+6

Mi dà '/ usr/lib', mentre si trova in'/usr/lib/x86_64-linux-gnu' –

+1

non ha funzionato per me. lo stesso problema di Marco Sulla. –

+0

Stesso problema. :(Vorrei davvero che ci fosse un modo per farlo: – Alec