2010-05-20 12 views
21

कहें कि पायथन पैकेज ए को बी, सी और डी की आवश्यकता है; क्या उन्हें 0 लोड किए बिना ए → बी सी डी सूचीबद्ध करने का कोई तरीका है? मेटाडाटा में
Requires (yolk -M A) अक्सर अपूर्ण, grr होते हैं।
कोई एतार/एग डाउनलोड कर सकता है, फिर ए/setup.py, देखें लेकिन उनमें से कुछ सुंदर हैं।सूची लोड किए बिना पाइथन पैकेज निर्भरताओं की सूची?

(मैंने सोचा है था कि कम से कम प्रथम स्तर निर्भरता हो रही यंत्रीकृत हो सकता है; यहां तक ​​कि एक 98% समाधान avalanching डाउनलोड से बेहतर होगा।)

इससे संबंधित एक सवाल: pip-upgrade-package-without-upgrading-dependencies

उत्तर

28

Snakefood

sfood -fuq package.py | sfood-target-files 

निर्भरता सूची जाएगा।

`-f` tells sfood to follow dependencies recursively 
`-u` tells sfood to ignore unused imports 
`-q` tells sfood to be quiet about debugging information 

, आप

sfood -fuq package.py | sfood-filter-stdlib | sfood-target-files 

आप पहले से ही ध्यान दिया है, अगर वहाँ अन्य निर्देशिकाओं आप पर ध्यान नहीं दिया चाहते हैं, हम कर रहे हैं, आप भी sfood -I उपयोग कर सकते हैं इस्तेमाल कर सकते हैं मानक पुस्तकालय से मॉड्यूल बाहर फ़िल्टर करने के लिए झंडा।

+0

उचित दिखता है, +1। sfoodxx -I /Library/...python2.6 (मैक) मानक आयात sys, os.path इत्यादि को फ़िल्टर नहीं करता है? – denis

+0

@ डेनिस: पायथन मानक पुस्तकालय से प्रविष्टियों को हटाने के लिए 'sfood-filter-stdlib' का उपयोग करें। मैं इसे शामिल करने के लिए अपना जवाब संपादित करूंगा ... – unutbu

+1

sfood-filter-stdlib में '/ usr/lib/python' कठोर है, और sfood-imports के लिए काम नहीं करता है। मैं लेखक से पूछ रहा हूं ... बायथवे केविन टीग, "मुझे एक टट्टू चाहिए" http://groups.google.com/group/django-developers/msg/5407cdb400157259 2008 में पैकेजिंग विधियों का एक उत्कृष्ट अवलोकन है।) – denis

12

मानक lib

नया संस्करण 2.3 में से modulefinder

इस मॉड्यूल एक ModuleFinder वर्ग कि एक स्क्रिप्ट के द्वारा आयातित मॉड्यूल के सेट निर्धारित करने के लिए इस्तेमाल किया जा सकता प्रदान करता है। modulefinder.py भी एक स्क्रिप्ट के रूप में चलाया जा सकता है, जो कि पाइथन स्क्रिप्ट के फ़ाइल नाम को इसके तर्क के रूप में दे रहा है जिसके बाद आयातित मॉड्यूल की एक रिपोर्ट मुद्रित की जाएगी।

मुझे यकीन नहीं है कि यह मॉड्यूल लोड नहीं करने के बारे में आपकी आवश्यकता का अनुपालन करता है या नहीं। From here:

modulefinder उपयोग बाईटकोड निरीक्षण निर्भरता को खोजने के लिए, और इसलिए किसी भी दुष्प्रभाव का अध्ययन किया जा रहा है मॉड्यूल आयात करने की वजह से हो सकता है कि से मुक्त है।

pylint या Gui2exe here

+2

मॉड्यूलफाइंडर काम करता है लेकिन यह बहुत सारी बेकार सामग्री और अप्रत्यक्ष निर्भरता दिखाएगा (निर्भरताएं जो आपकी निर्भरताओं द्वारा उपयोग की जा सकती हैं, लेकिन वास्तव में नहीं हैं)। आप यहां मॉड्यूलफाइंडर का उपयोग करके एक उदाहरण स्क्रिप्ट पा सकते हैं: https://gist.github.com/lrq3000/6175634 और यहां एक एएसटी पार्सिंग दृष्टिकोण का उपयोग करके एक वैकल्पिक स्क्रिप्ट (और जो मेरे लिए बेहतर तरीके से काम करती है): https: // gist .github.com/lrq3000/6175522 – gaborous

5

पैकेज से आप एक पिप स्थापित पैकेज (और एक __init__.py साथ नहीं एक निर्देशिका) मतलब तो के उपयोग के बारे में अन्य संकेत है, तो आप अजगर पैकेज पिप नामक उपयोग कर सकते हैं । उदाहरण के लिए:

def get_all_package_dependencies(): 
    """Return dictionary of installed packages to list of package dependencies.""" 
    return { 
     dist.key: [r.key for r in dist.requires()] 
     for dist in pip.get_installed_distributions() 
    } 
+0

मैं वेब पर एक पैकेज देखता हूं और इसके डीपी जानना चाहता हूं। 'पाइप इंस्टॉल --no-deps' है, फिर चारों ओर खुदाई करें ... या सूची-डीपी के लिए नए पाइप कमांड हैं? (आवश्यकताएँ फाइलें अक्सर वहां नहीं होती हैं।) – denis

+0

और ऊपर प्रिंट स्निपेट द्वारा उत्पादित आउटपुट को प्रिंट करने के लिए पीप्रिंट का उपयोग किया जा सकता है – binithb

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