มีวิธีใดในการแสดงแผนผังการพึ่งพาสำหรับแพ็คเกจ pip หรือไม่?


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

มีวิธีใดบ้างที่แสดงการอ้างอิงของแพ็คเกจ pip ที่ติดตั้ง


ฉันรู้ว่าคุณถามคำถามนี้เมื่อสี่ปีก่อนและตั้งใจทำเครื่องหมายคำตอบที่คุณได้รับอย่างรวดเร็วว่าเป็นคำตอบที่ดีที่สุด ขอบคุณที่ทำอย่างนั้น อย่างไรก็ตามฉันจะดูคำตอบที่คุณได้รับจาก Anthon ในอีกหนึ่งปีต่อมา pipdeptree น่ากลัว !!! เห็นได้ชัดว่า @naiquevin ไม่ได้เปิด SO ตั้งแต่เดือนเมษายน 2015 แต่เขาสร้างเครื่องมือที่ดีมากที่นี่
Rob Fagen

คำตอบ:


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 บรรทัดของโค้ด python) ควรปรับเปลี่ยนได้ง่ายตามความต้องการของคุณหรือคุณสามารถใช้ (ตามที่ @MERose ระบุไว้ใน pipdeptree 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+'พิมพ์ requirements.txt
MERose

@MERose ขอบคุณที่ชี้ให้เห็น ฉันต้องยังคงใช้เวอร์ชัน 0.2 เมื่อฉันเขียนสิ่งนี้
Anthon

ใช้ไม่ได้กับbokeh:( แพ็คเกจนี้มีการจัดระเบียบข้อกำหนดเฉพาะดังนั้น pip จึงไม่แสดงให้เห็น แต่ conda ทำ
Sklavit

12

คำเตือน: py2 only /andonware

yolk สามารถแสดงการอ้างอิงสำหรับแพ็กเกจโดยมีเงื่อนไขว่า

  • ถูกติดตั้งผ่าน setuptools
  • มาพร้อมกับข้อมูลเมตาที่มีข้อมูลการอ้างอิง

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

ขอบคุณ. วิธีนี้ไม่ใช่วิธีการแก้ปัญหาที่สมบูรณ์ แต่มีประโยชน์อย่างไร
tbicr

ฉันไม่แน่ใจว่าจะมีวิธีแก้ไขแบบเต็มหรือไม่ปัญหาคือไม่มีข้อมูลการอ้างอิงเสมอไป (เช่นสำหรับแพ็คเกจที่ติดตั้งผ่านdistutilsซึ่งไม่รองรับข้อมูลเมตาของแพ็คเกจ)
ali_m

5
ไข่แดงไม่มีการรองรับ py3k ในขณะที่เขียน
yegle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.