2013-12-14 16 views
9

Trong phiên bản Ubuntu/Debian mới hơn, libpython2.7.so là dưới /usr/lib/i386-linux-gnu/libpython2.7.so hoặc /usr/lib/x86_64-linux-gnu/libpython2.7.so, v.v. Trước đó, chúng có thể được tìm thấy trong /usr/lib/libpython2.7.so, bất kể kiến ​​trúc. Tôi chưa kiểm tra các bản phân phối khác. Làm cách nào để tìm đường dẫn của libpython2.7.so bằng python?Phân phối đường dẫn libpython độc lập

+0

Bạn đang tìm kiếm 'định vị libpython' hay cái gì khác? – janos

+0

'ldd/usr/local/bin/python' của bạn hiển thị cho bạn những gì? – Arovit

+0

'xác định vị trí libpython' tìm thấy khá nhiều hơn chỉ là tập tin duy nhất này, và tôi muốn lập trình tìm đường dẫn và cung cấp nó cho cmake. 'ldd/usr/local/bin/python' cho' Không có tập tin hoặc thư mục', và 'ldd/usr/bin/python' cung cấp một số tệp thư viện, nhưng' libpython2.7.so' không phải là một trong số chúng. – Psirus

Trả lời

0

Tôi giả sử bạn đang tìm cách liên kết với tệp này. Python thường được cài đặt với thông tin pkgconfig để giúp biên dịch chống lại nó. Cụ thể đối với tệp .so, bạn nên sử dụng pkg-config --libs python-2.7. Từ Python:

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

Nếu cờ chỉ được hiển thị là -lpython2.7, bạn có thể muốn xem xét việc đọc /etc/ld.so.conf để xem vị trí mặc định trong đó mối liên kết tìm kiếm các thư viện của mình.

7

Sử dụng pkg-config không phải là lựa chọn tốt nhất - nó sẽ không phân biệt giữa các cài đặt khác nhau của Python, chỉ trả lại cài đặt hệ thống. Bạn nên sử dụng Python thực thi để khám phá vị trí của libpythonX.Y.so.

Từ bên trong Python:

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

Hoặc bên trong một Makefile:

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

này sẽ khám phá ra các vị trí từ bất cứ điều gì thực thi Python là lần đầu tiên trong $PATH và do đó sẽ làm việc nếu có nhiều cài đặt Python trên hệ thống.

Tín dụng cho Niall Fitzgerald để chỉ ra điều này.

+6

Nó cung cấp cho tôi '/ usr/lib', trong khi nó nằm trong'/usr/lib/x86_64-linux-gnu' –

+1

không hoạt động đối với tôi. vấn đề tương tự như Marco Sulla đã chỉ ra. –

+0

Cùng một vấn đề. :(Thực sự muốn có một cách để làm điều này. – Alec

Các vấn đề liên quan