Apakah ada cara untuk menemukan semua paket Python PyPI yang diinstal dengan easy_install atau pip? Maksud saya, tidak termasuk semua yang diinstal dengan alat distribusi (dalam hal ini apt-get on Debian).
python
pip
easy-install
pypi
Jürgen A. Erhard
sumber
sumber
Jawaban:
pip freeze
akan menampilkan daftar paket yang diinstal dan versinya. Ini juga memungkinkan Anda untuk menulis paket-paket itu ke file yang nantinya dapat digunakan untuk mengatur lingkungan baru.https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
sumber
pip freeze
danpip list
daftar semuanya. Mereka tidak mengecualikan paket yang tidak diinstal olehpip
.pip freeze
dapat diandalkan dalam skrip, sedangkanpip list
akan menghasilkan kesalahan yang tidak terduga ketika digunakan dengan pipa.pip list -l
Ataupip list --local
merupakan jawaban terbaik, lihat stackoverflow.com/a/43012269/491884 oleh @MJBPada versi 1.3 dari pip sekarang Anda dapat menggunakan
pip list
Ini memiliki beberapa opsi yang berguna termasuk kemampuan untuk menunjukkan paket yang sudah ketinggalan zaman. Berikut dokumentasinya: https://pip.pypa.io/en/latest/reference/pip_list/
sumber
pip freeze
pip list --user
hanya menunjukkan paket yang diinstal oleh pengguna, dan tidak termasuk paket di seluruh sistem.Jika ada yang bertanya-tanya Anda dapat menggunakan perintah 'pip show'.
Ini akan mendaftar direktori instal dari paket yang diberikan.
sumber
Jika Debian berperilaku seperti versi Ubuntu baru-baru ini mengenai
pip install
target default, itu mudah: ia menginstal ke/usr/local/lib/
bukan/usr/lib
(apt
target default). Periksa /ubuntu/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747Saya adalah pengguna ArchLinux dan ketika saya bereksperimen dengan pip saya menemukan masalah yang sama. Inilah cara saya menyelesaikannya di Arch.
Kuncinya di sini adalah
/usr/lib/python2.7/site-packages
, yang merupakan instalasi direktori pip ke, YMMV.pacman -Qo
adalah bagaimana Arch pac kage pria ager memeriksa kepemilikan file.No package
adalah bagian dari pengembalian memberikan ketika ada paket memiliki file:error: No package owns $FILENAME
. Solusi rumit: Saya menanyakan tentang__init__.py
karenapacman -Qo
sedikit bodoh ketika datang ke direktori :(Untuk melakukannya untuk distro lain, Anda harus mencari tahu di mana
pip
menginstal barang (hanyasudo pip install
sesuatu), bagaimana cara meminta kepemilikan file (metode Debian / Ubuntudpkg -S
) dan apa yang dimaksud dengan "tidak ada paket yang memiliki jalur itu" kembali (Debian / Ubuntu adalahno path found matching pattern
). Pengguna Debian / Ubuntu, berhati-hatilah:dpkg -S
akan gagal jika Anda memberikannya tautan simbolik. Cukup atasi dulu dengan menggunakanrealpath
. Seperti ini:Pengguna Fedora dapat mencoba (terima kasih @eddygeek):
sumber
dpkg
tulis kesalahannya ke stderr jadi saya harus menambahkan arahan ulang2>&1
. Dan untuk output internasional tambahkanLANG=
di depanxargs dpkg -s
. dansed
juga merupakan alat yang bagus;) untuk menyimpan hanya nama paket path. Jadi saya berakhir dengan:find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | LANG= xargs dpkg -S 2>&1 | grep 'no path found' | sed "s/.*\/\([^\/]*\)\/__init__\.py.*/\1/"
Dimulai dari:
Untuk membuat daftar semua paket. Setelah Anda menemukan paket yang Anda inginkan, gunakan:
Ini akan menunjukkan kepada Anda detail tentang paket ini, termasuk foldernya. Anda dapat melewati bagian pertama jika Anda sudah tahu nama paketnya
Klik di sini untuk informasi lebih lanjut tentang pip show dan di sini untuk informasi lebih lanjut tentang daftar pip.
Contoh:
sumber
pip.get_installed_distributions()
akan memberikan daftar paket yang diinstalsumber
Di bawah ini agak lambat, tetapi memberikan daftar paket yang diformat dengan baik
pip
. Dengan kata lain, tidak semuanya diinstal "oleh" pip, tetapi semuanya harus dapat ditingkatkan dengan pip.Alasannya lambat adalah karena daftar isi dari seluruh repo pypi. Saya mengajukan tiket yang menyarankan untuk
pip list
menyediakan fungsi serupa tetapi lebih efisien.Output sampel: (membatasi pencarian ke subset alih-alih '.' Untuk semua.)
sumber
Menambahkan ke jawaban @Paul Woolcock,
akan membuat file persyaratan dengan semua paket yang diinstal bersama dengan nomor versi yang diinstal di lingkungan aktif di lokasi saat ini. Lari
akan menginstal paket yang ditentukan dalam file persyaratan.
sumber
Versi pip yang lebih baru memiliki kemampuan untuk melakukan apa yang OP inginkan melalui
pip list -l
ataupip freeze -l
(--list
).Pada Debian (setidaknya) halaman manual tidak memperjelas ini, dan saya hanya menemukannya - dengan asumsi bahwa fitur tersebut harus ada - dengan
pip list --help
.Ada komentar baru-baru ini yang menyarankan fitur ini tidak jelas dalam dokumentasi atau jawaban yang ada (walaupun diisyaratkan oleh beberapa orang), jadi saya pikir saya harus memposting. Saya lebih suka melakukannya sebagai komentar, tetapi saya tidak memiliki poin reputasi.
sumber
pip freeze --local
selama 8 tahun.pip list --local
tersedia juga ... tetapi perhatikan pertanyaan OP bukan tentang lingkungan virtual (yang--local
mendukung) tetapi tentang membedakan paket distro darisudo pip install
paket.Perhatikan bahwa jika Anda memiliki beberapa versi Python yang diinstal pada komputer Anda, Anda mungkin memiliki beberapa versi pip yang terkait dengannya.
Bergantung pada asosiasi Anda, Anda mungkin harus sangat berhati-hati dengan perintah pip apa yang Anda gunakan:
Bekerja untuk saya, di mana saya menjalankan Python3.4. Cukup gunakan
pip list
mengembalikan kesalahanThe program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip
.sumber
Seperti yang ditunjukkan @almenon, ini tidak lagi berfungsi dan ini bukan cara yang didukung untuk mendapatkan informasi paket dalam kode Anda. Berikut ini memunculkan pengecualian:
Untuk mencapai ini, Anda dapat mengimpor
pkg_resources
. Ini sebuah contoh:aku di
v3.6.5
sumber
Berikut ini adalah satu-liner untuk fedora atau distro rpm lainnya (berdasarkan tips @barraponto):
Tambahkan ini ke perintah sebelumnya untuk mendapatkan hasil yang lebih bersih:
sumber
Masukkan semua nama file / folder
site-packages/
(dandist-packages/
jika ada), dan gunakan manajer paket Anda untuk menghapus yang diinstal melalui paket.sumber
freeze pip mencantumkan semua paket yang diinstal meskipun tidak dengan pip / easy_install. Pada CentOs / Redhat ditemukan paket yang diinstal melalui rpm.
sumber
Jika Anda menggunakan distribusi python Anaconda , Anda dapat menggunakan
conda list
perintah untuk melihat apa yang diinstal dengan metode apa:Untuk mengambil entri yang diinstal oleh
pip
(termasuk kemungkinanpip
sendiri):Tentu saja Anda mungkin ingin memilih kolom pertama, yang dapat Anda lakukan dengan (tidak termasuk
pip
jika diperlukan):Akhirnya Anda dapat mengambil nilai-nilai ini dan mem-uninstall semua dari mereka menggunakan yang berikut ini:
Perhatikan penggunaan
-y
bendera untukpip uninstall
menghindari harus memberikan konfirmasi untuk menghapus.sumber
Bagi yang belum menginstal pip, saya menemukan skrip cepat ini di github (berfungsi dengan Python 2.7.13):
sumber
daftar pip [opsi] Anda dapat melihat referensi lengkap di sini
sumber
Setidaknya untuk Ubuntu (mungkin juga yang lain) berfungsi seperti ini (terinspirasi oleh posting sebelumnya di utas ini):
sumber