2013-07-03 77 views
5

Để cài đặt các gói Python của bên thứ ba, tôi đã sử dụng tập lệnh setup.py sử dụng setuptools.setup() để cài đặt một loạt các gói. Sau khi cài đặt, tôi có thể tìm thấy các gói này trên một máy dưới /usr/local/lib/python2.7/dist-packages và trên một máy khác trong /usr/lib/python2.7/site-packages.Làm thế nào để tìm ra đường dẫn cài đặt thư viện Python?

Bây giờ tôi muốn viết một tập lệnh Python để tìm ra nơi các gói của bên thứ ba đã được cài đặt. Làm thế nào tôi có thể làm điều đó?

1) sys.prefix = sys.exec_prefix nằm trên cả hai máy "/ usr".

2) Tệp thực thi python nằm trên cả hai máy/usr/bin/python.

3) distutils.sysconfig.get_python_lib() là /usr/lib/python2.7/dist-packages ("cục bộ" bị thiếu) trên một máy và /usr/lib/python2.7/site-packages trên máy khác.

Trả lời

0

Tôi không biết cách nào tốt để làm điều này bằng Python (ngoài việc thu thập thông tin các thư mục từ một thư mục đã cho để tìm tệp bằng os.walk). Nếu bạn không nhận được bất kỳ câu trả lời nào tốt hơn về cách thực hiện điều này bằng Python, bạn có thể thực thi lệnh trên hệ điều hành của bạn từ python để thực thi lệnh tìm kiếm Linux/Unix chuẩn trên thư viện bạn đang tìm kiếm. Bạn có thể sử dụng subprocess module để thực hiện việc này.

+0

Tôi thích giải pháp "thanh lịch" hơn tìm kiếm cây thư mục. Làm thế nào để setuptools biết nơi để cài đặt vào? – user2539266

+0

Vấn đề là ngay cả khi bạn có thể sử dụng cùng phương pháp để thiết lập thư mục mặc định, điều này sẽ không cho phép các tình huống mà người dùng không sử dụng mặc định. Tôi không biết bất kỳ cách nào khác, nhưng sẽ được quan tâm để xem những gì khác đề xuất đến. – ChrisProsser

4

Nếu các gói đã được cài đặt, bạn chỉ có thể nhập họ, và nhìn vào tài sản __file__ của họ:

>>> import mymodule 
>>> print mymodule.__file__ 
'/path/to/mymodule.py' 
+0

Bí quyết thú vị. Nhưng nó không thể được sử dụng, nếu các gói đã cài đặt khác nhau trên các máy chủ khác nhau và bạn không biết liệu một mô-đun nào đó có được cài đặt trên một máy chủ nào đó hay không. – user2539266

+0

Điều này rất hữu ích khi nhận được câu trả lời của tôi. –

1

Gần tìm ra giải pháp cho vấn đề này. Tôi đã tôn trọng this questionthis question để cảm ơn câu trả lời được cung cấp ở đó.

Trước tiên, bạn cần có danh sách tất cả các mô-đun đã cài đặt vào danh sách. Sử dụng this question để chụp đầu ra của solution to this question.

Bây giờ bạn có danh sách tất cả các mô-đun python đã cài đặt. Bạn sẽ cần phải xem định dạng của danh sách và sau đó định dạng nó đúng cách để có được các yếu tố cá nhân như tên của các mô-đun.

Sau đó, bạn có thể nhập mô-đun từ tên của chúng dưới dạng chuỗi như được giải thích here. Sau đó, như alejandro đã nói mymodule.__file__ chứa các đường dẫn.

Đây là một giải pháp có hiệu quả. Không phải là rất thanh lịch nhưng tôi chỉ là một người mới bắt đầu Python là tốt hơn tại google tìm kiếm hơn Python


Tôi tìm thấy một cách dễ dàng hơn để tìm nơi mô-đun được. Đây có thể là giải pháp "thanh lịch" mà OP đang tìm kiếm.

import sys 
print sys.path 

Từ các tài liệu Python về sys modulesys.path chứa

Một danh sách các chuỗi chỉ định đường dẫn tìm kiếm cho mô-đun. Được khởi tạo từ biến môi trường PYTHONPATH, cộng với một mặc định phụ thuộc vào cài đặt.

+0

Tôi không biết trước các thư mục có thể xem là gì. Nó có thể là/usr hoặc/usr/local hoặc một bản cài đặt Python riêng tư, nó có thể là các gói dist-package hoặc các gói site. Làm thế nào để setuptools biết nơi để cài đặt vào? – user2539266

+0

@ user2539266 Đã cập nhật câu trả lời. Có một cái nhìn. –

0

tôi thấy đường dẫn cài đặt của tôi qua sys.path:

my_name = "mypackage" 
def _post_install(): 
    def find_module_path(): 
     for p in sys.path: 
      if os.path.isdir(p): 
       for f in os.listdir(p): 
        if f == my_name: 
         return os.path.join(p, f) 
    install_path = find_module_path() 
    # do something we the install_path 

Lưu ý: Đây hoạt động sau khi các gói đã được đăng ký bởi setuptools, và có lẽ bạn cũng phải xử lý nếu các gói đã được cài đặt trong nhiều thư mục trong số sys.path.

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