Apakah ada cara untuk menunjukkan pohon ketergantungan untuk paket pip?

91

Saya memiliki proyek dengan beberapa dependensi paket, dengan persyaratan utama yang tercantum requirements.txt. Ketika saya menyebutnya pip freezemencetak paket yang saat ini diinstal sebagai daftar biasa. Saya lebih suka juga mendapatkan hubungan ketergantungan mereka, seperti ini:

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

Tujuannya adalah untuk mendeteksi ketergantungan setiap paket tertentu:

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

Dan masukkan ini ke arus saya requirements.txt. Misalnya, untuk masukan ini:

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

Saya ingin mendapatkan:

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

Apakah ada cara untuk menunjukkan dependensi paket pip yang diinstal?

tbicr
sumber
Saya tahu bahwa Anda menanyakan pertanyaan ini empat tahun lalu dan dengan rajin menandai jawaban yang Anda dapatkan dengan cepat sebagai jawaban terbaik. Terima kasih sudah melakukannya. Namun, saya akan melihat jawaban yang Anda dapatkan dari Anthon setahun kemudian. pipdeptree LUAR BIASA !!! Rupanya ,aivin belum pernah bergabung dengan SO sejak Apr 2015, tapi dia membuat alat yang sangat bagus di sini.
Rob Fagen

Jawaban:

137

Anda harus melihat 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

Itu tidak menghasilkan requirements.txtfile seperti yang Anda tunjukkan secara langsung. Namun sumber (255 baris kode python) harus relatif mudah untuk dimodifikasi sesuai kebutuhan Anda, atau sebagai alternatif Anda dapat (seperti yang ditunjukkan @MERose di pipdeptree 0.3 README) digunakan:

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

Versi 0.5 pipdeptreejuga memungkinkan keluaran JSON dengan --jsonopsi, yaitu penguraian mesin yang lebih mudah, dengan mengorbankan kurang terbaca.

Anthon
sumber
Menurut pypi.python.org/pypi/pipdeptree/0.3 , pipdeptree | grep -P '^\w+'mencetak persyaratan.txt.
MERose
@MERose Terima kasih telah menunjukkan hal itu. Saya pasti masih menggunakan versi 0.2 ketika saya menulis ini.
Anthon
Ini tidak berfungsi untuk bokeh:( Paket ini memiliki organisasi persyaratan khusus sehingga pip tidak menampilkannya, tetapi conda menampilkannya.
Sklavit
12

Peringatan: hanya py2 / meninggalkan perangkat lunak

yolk dapat menampilkan dependensi untuk paket, asalkan mereka

  • dipasang melalui setuptools
  • datang dengan metadata yang mencakup informasi ketergantungan

    $ yolk -d Theano
    Theano 0.6.0rc3
      scipy>=0.7.2
      numpy>=1.5.0
    
ali_m
sumber
Terima kasih. Ini bukan solusi lengkap, tetapi utilitas berguna.
tbicr
Saya tidak yakin apakah bisa ada solusi lengkap - masalahnya adalah informasi ketergantungan tidak selalu ada (misalnya untuk paket yang diinstal melalui distutils, yang tidak mendukung metadata paket)
ali_m
5
kuning telur tidak memiliki dukungan py3k pada saat penulisan.
yegle