क्या पाइप पैकेज के लिए निर्भरता के पेड़ों को दिखाने का कोई तरीका है?


96

मेरे पास कई पैकेज निर्भरताओं के साथ एक परियोजना है, मुख्य आवश्यकताओं को सूचीबद्ध किया जा रहा है requirements.txt। जब मैं pip freezeइसे कॉल करता हूं तो वर्तमान में स्थापित पैकेजों को सादे सूची के रूप में प्रिंट करता है। मैं उनके निर्भरता के रिश्तों को भी पसंद करूंगा, कुछ इस तरह:

Flask==0.9
    Jinja2==2.7
    Werkzeug==0.8.3

Jinja2==2.7

Werkzeug==0.8.3

Flask-Admin==1.0.6
    Flask==0.9
    Jinja2==2.7
    Werkzeug==0.8.3

लक्ष्य प्रत्येक विशिष्ट पैकेज की निर्भरता का पता लगाने के लिए है:

Werkzeug==0.8.3
    Flask==0.9
    Flask-Admin==1.0.6

और इन्हें मेरे करंट में डालें requirements.txt। उदाहरण के लिए, इस इनपुट के लिए:

Flask==0.9
Flask-Admin==1.0.6
Werkzeug==0.8.3

मैं लेना चाहता हूँ:

Flask==0.9
    Jinja2==2.7
Flask-Admin==1.0.6
Werkzeug==0.8.3

क्या किसी भी तरह से स्थापित पाइप पैकेजों की निर्भरता है?


मुझे पता है कि आपने चार साल पहले यह सवाल पूछा था और आपने जो जवाब दिया उसे आपने सबसे अच्छे उत्तर के रूप में देखा। इसे करने के लिए धन्यवाद। हालाँकि, मैं एंथन से एक साल बाद मिले जवाब पर एक नज़र डालूँगा। पिप्पेड्रीट्री अद्भुत है !!! जाहिरा तौर पर @naiquevin अप्रैल 2015 से SO पर नहीं हैं, लेकिन उन्होंने यहां एक बहुत अच्छा उपकरण बनाया है।
रॉब फ़ेगन

जवाबों:


142

आपको एक नज़र रखना चाहिए pipdeptree:

$ pip install pipdeptree
$ pipdeptree -fl
Warning!!! Cyclic dependencies found:
------------------------------------------------------------------------
xlwt==0.7.5
ruamel.ext.rtf==0.1.1
xlrd==0.9.3
openpyxl==2.0.4
  - jdcal==1.0
pymongo==2.7.1
reportlab==3.1.8
  - Pillow==2.5.1
  - pip
  - setuptools

यह एक requirements.txtफ़ाइल उत्पन्न नहीं करता है जैसा कि आपने सीधे संकेत दिया है। हालाँकि स्रोत (255 कोड की पायथन कोड) को आपकी आवश्यकताओं को संशोधित करने के लिए अपेक्षाकृत आसान होना चाहिए, या वैकल्पिक रूप से आप कर सकते हैं (जैसा कि @MERose इंगित किया गया है पाइपडिप्री 0.3 README में)

pipdeptree --freeze  --warn silence | grep -P '^[\w0-9\-=.]+' > requirements.txt

0.5 संस्करण pipdeptreeभी --jsonविकल्प के साथ JSON आउटपुट की अनुमति देता है, जो कम पठनीय होने की कीमत पर अधिक आसानी से मशीन पार्सबल है।


Pypi.python.org/pypi/pipdeptree/0.3 के अनुसार , pipdeptree | grep -P '^\w+'आवश्यकताओं को प्रिंट करता है।
मेरोस

@MERose कि बाहर इशारा करने के लिए धन्यवाद। जब मैंने यह लिखा था तब भी मैं संस्करण ०.२ का उपयोग कर रहा हूँ।
एंथन

यह काम नहीं कर रहा है bokeh:( इस पैकेज में विशिष्ट आवश्यकताओं का संगठन है इसलिए पाइप उन्हें नहीं दिखाता है, लेकिन कोंडा करता है।
स्कालिट

12

चेतावनी: py2 केवल / परित्याग

yolk पैकेज के लिए निर्भरता प्रदर्शित कर सकते हैं, बशर्ते कि वे

  • के माध्यम से स्थापित किए गए थे setuptools
  • मेटाडेटा के साथ आया जिसमें निर्भरता की जानकारी शामिल है

    $ yolk -d Theano
    Theano 0.6.0rc3
      scipy>=0.7.2
      numpy>=1.5.0
    

धन्यवाद। यह पूर्ण समाधान नहीं है, लेकिन फिर भी उपयोगी उपयोगिता है।
tbicr

मुझे यकीन नहीं है कि अगर कोई पूर्ण समाधान हो सकता है - समस्या यह है कि निर्भरता की जानकारी हमेशा मौजूद नहीं होती है (उदाहरण के लिए पैकेज के माध्यम से स्थापित distutils, जो पैकेज मेटाडेटा का समर्थन नहीं करता है)
अली_म

5
लिखने के समय के अनुसार जर्दी में py3k समर्थन नहीं है।
yegle
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.