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

रिटर्न: /usr/lib/python2.6/site-packagesलिस्टिंग स्थापित पायथन साइट-पैकेज?

import sys; print sys.path 

रिटर्न: ['', '/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',...............

लेकिन यह कैसे साइट-संकुल स्थापित से "आयात योग्य नाम" सूची? उदा।: (आयात परिणामों से पहले) django, pip, trm2pdf....

धन्यवाद।

+0

मेरे करीबी वोट को अनदेखा करें: एक बड़ा अंतर है (बहुत तेज़ पढ़ें) – ChristopheD

+0

क्या आपने [स्टैलियन] (http://pyevolve.sourceforge.net/wordpress/?p=2200) की कोशिश की है? – Tarantula

उत्तर

7

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

अच्छा !, अगर मैं योक-एल चलाता हूं ... यह मुझे सूचीबद्ध करता है: Django ... आदि, आदि। लेकिन सही "आयात योग्य नाम" django (लोअरकेस) है। उस बारे में क्या? – panchicore

2

आप pkgutil का उपयोग कर सकते हैं। यह /usr/lib/python2.6/site-packages के अंदर सभी मॉड्यूल सूचीबद्ध करता है: (sys.modules के विपरीत, यह मॉड्यूल को पहले बिना आयात किए मॉड्यूल सूचीबद्ध करता है)।

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

संपादित: The docswalk_packages सूची नहीं है। हालांकि, pkgutil में pkgutil.__all__ में walk_packages शामिल हैं। इसका मतलब है कि यह pkgutil के सार्वजनिक इंटरफ़ेस का हिस्सा है। आप /usr/lib/python2.6/pkgutil.py में या help(pkgutil.walk_packages) टाइप करके 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

आप sys.modules चाहते हैं।

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

आप वहां से टुकड़ा और पासा कर सकते हैं।

+0

>>> आयात pprint, सिस >>> pprint (sys.modules) Traceback (सबसे हाल कॉल पिछले): फ़ाइल "", लाइन 1, लेखन त्रुटि में: 'मॉड्यूल' ऑब्जेक्ट प्रतिदेय – panchicore

+3

कोशिश नहीं है 'pprint.pprint (sys.modules)' –

+0

आउटपुट है: {'UserDict': ,.... स्थापित प्लगइन प्रतीत नहीं होता है। – panchicore

10

pip नौकरी के लिए एक है, क्योंकि यह पाइथन पैकेजों को स्थापित करने और प्रबंधित करने का एक साधन है। बाद स्थापित आप निष्पादित करने के लिए है:

pip freeze 

उत्पादन संकुल और पिप्स आवश्यकताओं प्रारूप में संस्करण जानकारी (एक आदेश के साथ उन लोगों पैकेज इंस्टॉल करने बाद में इस्तेमाल किया जा सकता) होगा कि। आउटपुट का प्रारूप इस तरह है:

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

पीआईपी 1.3 से शुरू करना एक [सूची] (http://www.pip-installer.org/en/latest/usage.html#pip-list) कमांड है। –

0

मुझे एक आसान तरीका पता नहीं है। एक पाइथन वितरण (यानी जो कुछ स्थापित किया गया था, जैसे Django 1.3) में शून्य या अधिक पायथन मॉड्यूल, शून्य या अधिक पायथन पैकेज हो सकते हैं (यानी मॉड्यूल जिनमें सबमिड्यूल हैं, अन्य टूल्स कॉल पैकेज नहीं हैं), शून्य या अधिक स्क्रिप्ट, शून्य या अधिक डेटा की फ़ाइलें। यदि आप पाइप या easy_install के साथ स्थापित हैं, तो मेटाडाटा फ़ाइलों को अंडे-जानकारी निर्देशिकाओं/फ़ाइलों/ज़िपित निर्देशिकाओं में लिखा जाता है, इसलिए एक उपकरण इन फ़ाइलों को प्रदर्शित करने के लिए चला सकता है कि वितरण के लिए कौन से मॉड्यूल या पैकेज स्थापित किए गए थे, लेकिन मुझे कोई नहीं पता वह उपकरण जो करता है।

जर्दी और पीआईपी फ्रीज केवल वितरण को सूचीबद्ध करेगा (भले ही वे उन्हें पैकेज कहते हैं), ताकि आपको यह पता चल सके कि कौन सा संस्करण स्थापित है, और फिर आप उन्हें अपग्रेड या अनइंस्टॉल कर सकते हैं।

sys.modules का निरीक्षण केवल वर्तमान पायथन सत्र के दौरान आयातित मॉड्यूल के बारे में जानकारी देता है।

इसलिए यह जानने के लिए कि वितरण को स्थापित करने के बाद आपके सिस्टम पर कौन से मॉड्यूल आयात योग्य हैं, आपको साइट-पैकेज और इसी तरह की निर्देशिकाओं के कच्चे निरीक्षण का सहारा लेना होगा, या पैकेजिंग मेटाडेटा फ़ाइलों पर चलने और मॉड्यूल निकालने के लिए कुछ कोड लिखना होगा।यह शुद्ध distutils के साथ स्थापित वितरण के लिए काम नहीं करेगा।

यह स्पष्ट रूप से अपूर्ण और भ्रमित है; हम अभी भी पायथन पैकेजिंग पर काम कर रहे हैं।

बीटीडब्ल्यू, क्या मैं पूछ सकता हूं कि आपके प्रश्न के लिए उपयोग केस क्या है? आम तौर पर आप इसके साथ कुछ करने के लिए एक वितरण स्थापित करते हैं, और वही दस्तावेज जो आपको बताता है कि इंस्टॉल करना है, आपको बताएगा कि आयात करना क्या है।

संबंधित मुद्दे