2013-03-29 13 views
21

मैं पायथन पैकेज के निर्भरता पेड़ का विश्लेषण करना चाहता हूं। मैं यह डेटा कैसे प्राप्त कर सकता हूं?पायथन पैकेज निर्भरता पेड़

बातें मैं पहले से ही पता

  1. setup.py कभी कभी एक requires क्षेत्र है कि पैकेज निर्भरता को सूचीबद्ध होता है
  2. PyPi अजगर संकुल की एक ऑनलाइन रिपोजिटरी
  3. PyPi एक API है

हालात यह है कि मुझे नहीं पता

  1. पीईपीआई पर बहुत कम परियोजनाएं (लगभग 10%) स्पष्ट रूप से requires फ़ील्ड में निर्भरता सूचीबद्ध करती हैं लेकिन pip/easy_install अभी भी सही पैकेज डाउनलोड करने का प्रबंधन करती है। मैं क्या खो रहा हूँ? उदाहरण के लिए सांख्यिकीय कंप्यूटिंग के लिए लोकप्रिय लाइब्रेरी, pandas, requires सूचीबद्ध नहीं है लेकिन अभी भी numpy, pytz, आदि स्थापित करने का प्रबंधन करता है .... क्या निर्भरता की पूरी सूची स्वचालित रूप से एकत्र करने का कोई बेहतर तरीका है?
  2. क्या कोई पूर्व-मौजूदा डेटाबेस कहीं है? क्या मैं मौजूदा काम दोहरा रहा हूं?
  3. समान, आसानी से सुलभ, डेटाबेस वितरण प्रणाली (आर, Clojure, आदि ...?) के साथ अन्य भाषाओं
+0

आपका प्रश्न, जैसा कि यह खड़ा है, वास्तव में बहुत व्यापक है। एक पोस्ट में बहुत सारे प्रश्न न डालें, और इसे व्यावहारिक और उत्तरदायी रखें। आपका बिंदु 3. कंक्रीट उत्तरों की बजाय बहस और खरीदारी सूचियों को आमंत्रित करता है। प्रशंसा के लिए –

उत्तर

18

इसके बजाय आप, New and changed setup keywords देख install_requires क्षेत्र को देखकर किया जाना चाहिए के लिए मौजूद है।

requires निर्भरता स्थापना के लिए भरोसा करने के लिए बहुत अस्पष्ट माना जाता है। इसके अलावा, और test_requires फ़ील्ड setup.py और परीक्षण चलाने के लिए आवश्यक निर्भरताओं के लिए हैं।

निश्चित रूप से, निर्भरता ग्राफ का विश्लेषण पहले किया गया है; इस blog article by Olivier Girardot से इस शानदार छवि आता है:

PyPI dependencies
छवि ग्राफ के इंटरैक्टिव संस्करण से जुड़ा हुआ है।

+1

thx: पी –

+4

अच्छा, यह * एक बहुत ही सुंदर ग्राफ है! –

+1

वह ग्राफ अविश्वसनीय है। – Will

2

pip जैसे टूल का उपयोग करके, आप प्रत्येक पैकेज के लिए सभी आवश्यकताओं को सूचीबद्ध कर सकते हैं।

आदेश है:

pip install --no-install package_name 

आपके पास अपनी स्क्रिप्ट में पिप के हिस्से का पुन: उपयोग कर सकते हैं। पार्सिंग आवश्यकताओं के लिए ज़िम्मेदार हिस्सा मॉड्यूल pip.req है।

+2

मुझे पायथन के भीतर से 'पाइप' का उपयोग करने का विचार पसंद है। यदि मेरे पास पहले से ही पैकेज स्थापित है तो कमांड लाइन इंटरफ़ेस विफल हो जाता है। किसी विशेष पैकेज की निर्भरताओं को खोजने के लिए मैं सीधे पायथन कोड का उपयोग कैसे कर सकता हूं? – MRocklin

+1

'--no-install' बहिष्कृत है। –

0

यहाँ कैसे आप प्रोग्राम अजगर pip पैकेज का उपयोग यह कर सकते हैं है:

from pip._vendor import pkg_resources # Ensure pip conf index-url pointed to real PyPi Index 

# Get dependencies from pip 
package_name = 'Django' 
try: 
    package_resources = pkg_resources.working_set.by_key[package_name.lower()] # Throws KeyError if not found 
    dependencies = package_resources._dep_map.keys() + ([str(r) for r in package_resources.requires()]) 
    dependencies = list(set(dependencies)) 
except KeyError: 
    dependencies = [] 

और यहाँ कैसे आप PyPi एपीआई से निर्भरता प्राप्त कर सकते है:

import requests 
import json 
package_name = 'Django' 
# Package info url 
PYPI_API_URL = 'https://pypi.python.org/pypi/{package_name}/json' 
package_details_url = PYPI_API_URL.format(package_name=package_name) 
response = requests.get(package_details_url) 
data = json.loads(response.content) 
if response.status_code == 200: 
    dependencies = data['info'].get('requires_dist') 
    dependencies2 = data['info'].get('requires') 
    dependencies3 = data['info'].get('setup_requires') 
    dependencies4 = data['info'].get('test_requires') 
    dependencies5 = data['info'].get('install_requires') 
    if dependencies2: 
     dependencies.extend(dependencies2) 
    if dependencies3: 
     dependencies.extend(dependencies3) 
    if dependencies4: 
     dependencies.extend(dependencies4) 
    if dependencies5: 
     dependencies.extend(dependencies5) 
    dependencies = list(set(dependencies)) 

आप कॉल करने के लिए उपयोग कर सकते हैं प्रत्यावर्तन पूर्ण पेड़ पाने के लिए निर्भरताओं की निर्भरता। चीयर्स!

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