2010-02-20 58 views
10
from distutils.sysconfig import get_python_lib; print get_python_lib() 

Returns: /usr/lib/python2.6/site-packagesLiệt kê các gói site python đã cài đặt?

import sys; print sys.path 

Returns: ['', '/usr/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg', '/usr/lib/python2.6/site-packages/pip-0.6.3-py2.6.egg', '/usr/lib/python2.6/site-packages/TRML2PDF-1.0-py2.6.egg', '/usr/lib/python2.6/site-packages/django_threaded_multihost-1.3_3-py2.6.egg',...............

Nhưng làm thế nào để liệt kê các "tên có thể nhập cảng" từ trang web gói cài đặt không? Ví dụ: (trước khi nhập kết quả) django, pip, trm2pdf....

Cảm ơn.

+0

Bỏ qua phiếu bầu của tôi: có sự khác biệt đáng kể (đọc quá nhanh) – ChristopheD

+0

Bạn đã thử [Stallion] (http://pyevolve.sourceforge.net/wordpress/?p=2200) chưa? – Tarantula

Trả lời

7

Khám phá yolk.

Yolk is a Python command-line tool and library for obtaining information about packages installed by setuptools, easy_install and distutils (Python 2.5) and for querying PyPI (Python Package Index a.k.a. The Cheese Shop).

+0

Nice !, Nếu tôi chạy lòng đỏ ... Nó liệt kê tôi: Django ... v.v. nhưng "tên có thể nhập" chính xác là django (chữ thường). những gì về điều đó? – panchicore

2

Bạn có thể sử dụng pkgutil. Điều này liệt kê tất cả các mô-đun bên trong /usr/lib/python2.6/site-packages: (Không giống như sys.modules, danh sách này liệt kê các mô-đun mà bạn không phải nhập chúng trước).

import pkgutil 
print [name for module_loader,name,ispkg in 
      pkgutil.walk_packages(['/usr/lib/python2.6/site-packages'])] 

Sửa: The docs không liệt kê walk_packages. Tuy nhiên, pkgutil bao gồm walk_packages trong pkgutil.__all__. Điều này có nghĩa là nó là một phần của giao diện công cộng của pkgutil. Bạn có thể tìm thấy những tài liệu sau đây về walk_packages trong /usr/lib/python2.6/pkgutil.py hoặc bằng cách gõ help(pkgutil.walk_packages):

Definition: pkgutil.walk_packages(path=None, prefix='', onerror=None) 
Docstring: 
    Yields (module_loader, name, ispkg) for all modules recursively 
    on path, or, if path is None, all accessible modules. 

    'path' should be either None or a list of paths to look for 
    modules in. 

    'prefix' is a string to output on the front of every module name 
    on output. 

    Note that this function must import all *packages* (NOT all 
    modules!) on the given path, in order to access the __path__ 
    attribute to find submodules. 

    'onerror' is a function which gets called with one argument (the 
    name of the package which was being imported) if any exception 
    occurs while trying to import a package. If no onerror function is 
    supplied, ImportErrors are caught and ignored, while all other 
    exceptions are propagated, terminating the search. 

    Examples: 

    # list all modules python can access 
    walk_packages() 

    # list all submodules of ctypes 
    walk_packages(ctypes.__path__, ctypes.__name__+'.') 
3

Bạn muốn sys.modules.

import pprint, sys 
pprint.pprint(sys.modules) 

Bạn có thể cắt và xúc xắc từ đó.

+0

>>> import pprint, sys >>> pprint (sys.modules) Traceback (gần đây nhất gọi cuối cùng): File "", dòng 1, trong Lỗi Loại: 'module' đối tượng không phải là callable – panchicore

+3

Thử 'pprint.pprint (sys.modules)' –

+0

đầu ra là: {'UserDict': ,.... dường như không phải là các pluggins được cài đặt. – panchicore

10

pip là công cụ dành cho công việc vì đây là công cụ để cài đặt và quản lý gói Python. Sau khi cài đặt, bạn phải thực thi:

pip freeze 

Điều đó sẽ xuất ra các gói và thông tin phiên bản theo định dạng yêu cầu pip (có thể được sử dụng sau này để cài đặt các gói đó bằng một lệnh). Định dạng của đầu ra giống như:

querystring-parser==1.0 
raven==1.4.6 
requests==0.14.2 
scipy==0.10.1 
+1

Bắt đầu từ pip 1.3 có lệnh [list] (http://www.pip-installer.org/en/latest/usage.html#pip-list). –

0

Tôi không biết một cách dễ dàng. Một phân phối Python (tức là một cái gì đó đã được cài đặt, như Django 1.3) có thể có 0 hoặc nhiều mô-đun Python, không hoặc nhiều gói Python (tức là mô-đun có submodules, không phải những gì các công cụ khác gọi gói), zero hoặc nhiều script, zero hoặc hơn Hồ sơ dữ liệu. Nếu bạn đã cài đặt pip hoặc easy_install, các tệp siêu dữ liệu được ghi vào thư mục/thư mục/tệp nén trứng, do đó, công cụ có thể đi các tệp này để hiển thị những mô-đun hoặc gói nào đã được cài đặt để phân phối, nhưng tôi không biết công cụ thực hiện điều đó.

đông lạnh và đóng băng pip sẽ chỉ liệt kê các bản phân phối (ngay cả khi chúng gọi chúng là gói), để cho bạn biết phiên bản nào được cài đặt và sau đó bạn có thể nâng cấp hoặc gỡ cài đặt chúng.

Kiểm tra sys.modules chỉ cung cấp thông tin về các mô-đun được nhập trong phiên Python hiện tại. Để biết mô-đun nào có thể nhập được trên hệ thống của bạn sau khi cài đặt bản phân phối, bạn phải kiểm tra thô sơ các gói trang web và các thư mục tương tự hoặc viết một số mã để đi qua các tệp siêu dữ liệu đóng gói và trích xuất các mô-đun.Điều này sẽ không hoạt động đối với các bản phân phối được cài đặt với các dấu hiệu thuần túy.

Điều này rõ ràng là không hoàn hảo và gây nhầm lẫn; chúng tôi vẫn đang làm việc trên bao bì Python.

BTW, tôi có thể hỏi trường hợp sử dụng cho câu hỏi của bạn không? Thông thường bạn cài đặt một bản phân phối để làm điều gì đó với nó, và tài liệu tương tự cho bạn biết những gì cần cài đặt sẽ cho bạn biết cần nhập gì.

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