2013-06-19 23 views
31

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

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 sự 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 những thành dòng requirements.txt tôi. 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 nhận đượ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 gói pip cài đặt?

+0

Tôi biết rằng bạn đã đặt câu hỏi này cách đây bốn năm và đã đánh dấu một cách siêng năng câu trả lời bạn nhanh chóng nhận được là câu trả lời hay 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 được trên SO kể từ tháng 4 năm 2015, nhưng ông đã tạo ra một công cụ thực sự tốt đẹp ở đây. –

Trả lời

49

Bạn nên có một cái nhìn tại 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 tệp requirements.txt như bạn đã chỉ ra trực tiếp. Tuy nhiên nguồn (255 dòng mã python) nên tương đối dễ dàng để thay đổi yêu cầu của bạn, hoặc cách khác bạn có thể (như @MERose chỉ là trong pipdeptree 0,3 README) ra sử dụng:

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

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

+0

Theo https://pypi.python.org/pypi/pipdeptree/0.3, 'pipdeptree | grep -P '^ \ w +' 'in tệp requirements.txt. – MERose

+0

@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 nó. – Anthon

+0

Nó không hoạt động đối với 'bokeh': (Gói này có tổ chức cụ thể về các yêu cầu để pip không hiển thị chúng, nhưng conda không làm như vậy. – Sklavit

12

yolk có thể hiển thị phụ thuộc đối với các gói, với điều kiện là họ

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

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

Cảm ơn. Đây không phải là giải pháp đầy đủ, mà là tiện ích hữu ích. – tbicr

+0

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

+1

lòng đỏ không có py3k hỗ trợ tính đến thời điểm viết. – yegle