2013-12-14 19 views
9

Pod nowszymi wersjami Ubuntu/Debian, libpython2.7.so jest pod /usr/lib/i386-linux-gnu/libpython2.7.so lub /usr/lib/x86_64-linux-gnu/libpython2.7.so itp. Wcześniej można je było znaleźć w /usr/lib/libpython2.7.so, bez względu na architekturę. Nie sprawdziłem innych dystrybucji. Jak znaleźć ścieżkę libpython2.7.so z python?Niezależna ścieżka dystrybucji libpython

+0

Szukasz 'locate libpython' lub czegoś innego? – janos

+0

co pokazuje twój 'ldd/usr/local/bin/python'? – Arovit

+0

'locate libpython' znajduje się o wiele więcej niż tylko ten pojedynczy plik i chcę programowo znaleźć ścieżkę i dostarczyć ją do cmake. 'ldd/usr/local/bin/python' daje' Brak takiego pliku lub katalogu', a 'ldd/usr/bin/python' daje kilka plików bibliotecznych, ale' libpython2.7.so' nie jest jednym z nich. – Psirus

Odpowiedz

0

Zakładam, że szukasz połączenia z tym plikiem. Python jest zwykle instalowany z pkgconfig info, aby pomóc w kompilacji przeciwko niemu. W szczególności dla pliku .so powinieneś użyć pkg-config --libs python-2.7. Od Pythona:

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

Jeśli tylko flaga pokazany jest -lpython2.7, to może warto rozważyć czytania /etc/ld.so.conf zobaczyć domyślne lokalizacje, w których łącznik patrzy na swoich bibliotek.

7

Używanie pkg-config nie jest najlepszą opcją - nie rozróżnia różnych instalacji Pythona, zwracając jedynie instalację systemu. Lepiej jest użyć pliku wykonywalnego Python, aby odkryć lokalizację libpythonX.Y.so.

Od wewnątrz Python:

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

lub wewnątrz Makefile:

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

ten odkryje lokalizacją cokolwiek Python wykonywalny jest pierwszym w $PATH a więc będzie działać, jeśli istnieje wiele instalacji Pythona w systemie.

Kredyt na Niall Fitzgerald za wskazanie tego.

+6

Daje mi '/ usr/lib', natomiast znajduje się w'/usr/lib/x86_64-linux-gnu' –

+1

nie działa dla mnie. ten sam problem, na jaki zwrócił uwagę Marco Sulla. –

+0

Ten sam problem. :(Naprawdę chciałbym, aby był sposób na zrobienie tego: – Alec