Có cách nào để hiển thị cây phụ thuộc cho gói pip không?


92

Tôi có một dự án với nhiều gói phụ thuộc, các yêu cầu chính được liệt kê trong requirements.txt. Khi tôi gọi pip freezenó sẽ in các gói hiện được cài đặt dưới dạng danh sách đơn giản. Tôi cũng muốn có được các mối quan hệ phụ thuộc của họ, như thế này:

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

Mục đích là để phát hiện các phụ thuộc của từng gói cụ thể:

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

Và chèn chúng vào hiện tại của tôi requirements.txt. Ví dụ, đối với đầu vào này:

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

Tôi muốn có được:

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

Có cách nào hiển thị sự phụ thuộc của các gói pip đã cài đặt không?


Tôi biết rằng bạn đã hỏi câu hỏi này bốn năm trước và chăm chỉ đánh dấu câu trả lời mà bạn nhanh chóng nhận được là câu trả lời đúng nhất. Cảm ơn bạn đã làm điều đó. Tuy nhiên, tôi sẽ xem xét câu trả lời bạn nhận được từ Anthon một năm sau đó. pipdeptree là TUYỆT VỜI !!! Rõ ràng @naiquevin đã không tham gia SO kể từ tháng 4 năm 2015, nhưng anh ấy đã tạo ra một công cụ thực sự tốt ở đây.
Rob Fagen

Câu trả lời:


138

Bạn nên xem qua 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

Nó không tạo ra một requirements.txttệp như bạn đã chỉ ra trực tiếp. Tuy nhiên, nguồn (255 dòng mã python) sẽ tương đối dễ sửa đổi theo nhu cầu của bạn, hoặc bạn có thể (như @MERose đã chỉ ra là trong pipdeptree 0.3 README) khi sử dụng:

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

Phiên bản 0.5 của pipdeptreecũng cho phép đầu ra JSON với --jsontùy chọn, dễ dàng phân tích cú pháp máy hơn, với chi phí là khó đọc hơn.


Theo pypi.python.org/pypi/pipdeptree/0.3 , pipdeptree | grep -P '^\w+'in ra một tệp tests.txt .
MERose

@MERose Cảm ơn bạn đã chỉ ra điều đó. Tôi phải vẫn đang sử dụng phiên bản 0.2 khi tôi viết điều này.
Anthon

Nó không phải là làm việc cho bokeh:( Gói này có tổ chức cụ thể các yêu cầu để pip không chỉ cho họ, nhưng conda làm.
Sklavit

12

Cảnh báo: chỉ py2 / phần mềm bỏ rơi

yolk có thể hiển thị các phần phụ thuộc cho các gói, miễn là chúng

  • đã được cài đặt qua setuptools
  • đi kèm với siêu dữ liệu bao gồm thông tin phụ thuộc

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

Cảm ơn. Đây không phải là giải pháp đầy đủ, nhưng rất hữu ích.
tbicr

Tôi không chắc chắn nếu có thể là một giải pháp đầy đủ - vấn đề là thông tin phụ thuộc không phải lúc nào tồn tại (ví dụ đối với các gói cài đặt thông qua distutils, mà không hỗ trợ gói siêu dữ liệu)
ali_m

5
noãn hoàng không có hỗ trợ py3k tính đến thời điểm viết bài.
yegle
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.