Ketika saya melakukan pembekuan pip saya melihat sejumlah besar paket Python yang saya tidak instal secara eksplisit, misalnya
$ pip freeze
Cheetah==2.4.3
GnuPGInterface==0.3.2
Landscape-Client==11.01
M2Crypto==0.20.1
PAM==0.4.2
PIL==1.1.7
PyYAML==3.09
Twisted-Core==10.2.0
Twisted-Web==10.2.0
(etc.)
Apakah ada cara bagi saya untuk menentukan mengapa pip menginstal paket dependen khusus ini? Dengan kata lain, bagaimana cara menentukan paket induk yang memiliki paket-paket ini sebagai dependensi?
Misalnya, saya mungkin ingin menggunakan Twisted dan saya tidak ingin bergantung pada suatu paket sampai saya tahu lebih banyak tentang tidak sengaja menghapus atau memutakhirkannya.
pipdeptree -r
"Menunjukkan pohon dependensi dengan cara terbalik, yaitu. Sub-dependensi terdaftar dengan daftar paket yang membutuhkannya di bawahnya."pipdeptree
bagus. Sayangnya itu tampaknya tidak memperhitungkan dependensi akun untuk paket yang diinstal oleh conda: mis. Di conda env di manamatplotlib
dannumpy
diinstal menggunakan pip, tetapiscipy
diinstal menggunakan conda,scipy
muncul di pipdeptree sebagai tidak memiliki depency dan tidak ada tanggungan (jugapip show scipy
menunjukkan tidak ada Persyaratan).python -m pipdeptree
sebaliknya (bahkan ketika executable diinstal ke virtualenv) hanya mencantumkan dependensi sistem.The
pip show
perintah akan menunjukkan apa yang diperlukan paket untuk paket tertentu (catatan bahwa paket tertentu harus sudah diinstal):pip show
diperkenalkan dalam versi pip 1.4rc5sumber
pip show
diperkenalkan di versi 1.4rc5, dan hadir di (saat ini saat penulisan) 1.4.1pip freeze | grep -v "\-e" | sed s/\=\=.*// | awk 'system("pip show " $1)' | grep -E '^(Name:|Requires:)' | sed s/Name:/\\\nName:/
- tetapi tampaknya pipdeptree sekarang merupakan solusi yang lebih baik.Seperti yang baru-baru ini saya katakan di utas hn , saya akan merekomendasikan yang berikut:
Punya
requirements.txt
file komentar dengan dependensi utama Anda:Install dependensi Anda:
pip install -r requirements.txt
. Sekarang Anda mendapatkan daftar lengkap dependensi Anda denganpip freeze -r requirements.txt
:Ini memungkinkan Anda untuk menjaga struktur file Anda dengan komentar, memisahkan dependensi Anda dari dependensi dependensi Anda. Dengan cara ini Anda akan memiliki waktu yang jauh lebih baik di hari Anda perlu menghapus salah satunya :)
Perhatikan yang berikut ini:
requirements.raw
kontrol versi bersih dengan untuk membangun kembali penuh Andarequirements.txt
.pip install --no-install <package_name>
untuk mendaftar persyaratan spesifik.sumber
pip freeze -r requirements.txt
tidak banyak digunakan. Sangat berguna untuk menjaga dependensi dan sub dependensi.pip install
tidak lagi mendukung--no-install
.Anda juga dapat menggunakan perintah satu baris yang menyalurkan paket-paket dalam persyaratan untuk menampilkan pip.
sumber
<package_name>==<package_version>
.Pertama-tama
pip freeze
menampilkan semua paket yang diinstal saat ini Python, belum tentu menggunakan PIP.Paket Python kedua memang berisi informasi tentang paket dependen serta versi yang diperlukan . Anda dapat melihat dependensi pkg tertentu menggunakan metode yang dijelaskan di sini . Saat Anda memutakhirkan paket, skrip pemasang seperti PIP akan menangani pemutakhiran dependensi untuk Anda.
Untuk mengatasi pembaruan paket saya sarankan menggunakan file persyaratan PIP . Anda dapat menentukan paket dan versi apa yang Anda butuhkan, dan menginstalnya sekaligus menggunakan pip install.
sumber
Gunakan pipupgrade !
pipupgrade menampilkan grafik ketergantungan dan menyoroti setiap paket untuk kemungkinan pembaruan (berdasarkan versi semantik). Ini juga menampilkan ketergantungan anak yang saling bertentangan dengan cara yang cantik.
pipupgrade
juga memastikan untuk meningkatkan paket yang ada dalam beberapa lingkungan Python. Kompatibel dengan Python2.7 +, Python3.4 + dan pip9 +, pip10 +, pip18 +, pip19 +.sumber
(solusi, bukan jawaban yang benar)
Punya masalah yang sama, dengan lxml tidak menginstal dan saya ingin tahu siapa yang butuh lxml. Bukan yang membutuhkan lxml . Berakhir melewati masalah dengan.
mencatat di mana paket situs saya ditempatkan.
pergi ke sana dan grep rekursif untuk impor (grep terakhir --invert-match berfungsi untuk menghapus file lxml sendiri dari pertimbangan).
Ya, bukan jawaban tentang bagaimana menggunakan pip untuk melakukannya, tetapi saya tidak berhasil dari saran di sini, untuk alasan apa pun.
sumber
Saya menulis skrip cepat untuk mengatasi masalah ini. Skrip berikut akan menampilkan paket induk (tergantung) untuk setiap paket yang diberikan. Dengan cara ini Anda dapat yakin bahwa aman untuk meningkatkan atau menginstal paket tertentu. Dapat digunakan sebagai berikut:
dependants.py PACKAGENAME
sumber
get_installed_distributions()
metode ini tidak lagi tersedia. github.com/pypa/pip/issues/5243