Easy_install veya pip ile yüklenmiş tüm Python PyPI paketlerini bulmanın bir yolu var mı? Yani, dağıtım araçlarıyla kurulan / kurulan her şeyi hariç tutmak (bu durumda Debian üzerinde apt-get).
Easy_install veya pip ile yüklenmiş tüm Python PyPI paketlerini bulmanın bir yolu var mı? Yani, dağıtım araçlarıyla kurulan / kurulan her şeyi hariç tutmak (bu durumda Debian üzerinde apt-get).
Yanıtlar:
pip freeze
kurulu paketlerin ve sürümlerinin bir listesini çıkarır. Ayrıca, bu paketleri daha sonra yeni bir ortam oluşturmak için kullanılabilecek bir dosyaya yazmanıza izin verir.
https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
pip freeze
ve pip list
her şeyi listeler. Tarafından yüklenmemiş paketleri hariç tutmazlar pip
.
pip freeze
komut dosyalarında güvenilir buluyorum , oysa pip list
borularla birlikte kullanıldığında beklenmedik hatalar üretecek.
pip list -l
veya pip list --local
, en iyi yanıtı bakın stackoverflow.com/a/43012269/491884 @MJB tarafından
Pip 1.3 sürümünden sonra artık pip list
Eski paketleri gösterme yeteneği de dahil olmak üzere bazı kullanışlı seçeneklere sahiptir. İşte belgeler: https://pip.pypa.io/en/latest/reference/pip_list/
pip freeze
pip list --user
yalnızca kullanıcı tarafından kurulan paketleri gösterir ve sistem çapında paketleri hariç tutar.
Merak eden biri varsa 'pip show' komutunu kullanabilirsiniz.
pip show [options] <package>
Bu, verilen paketin kurulum dizinini listeler.
Son Ubuntu sürümleri gibi Debian davranacağını ilişkin ise pip install
varsayılan hedefi, ölü kolay: o kadar yükler /usr/local/lib/
yerine /usr/lib
( apt
varsayılan hedef). KontrolHttps://askubuntu.com/questions/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747 adresini edin
Ben bir ArchLinux kullanıcısı ve pip ile denediğim gibi bu aynı sorunla karşılaştım. İşte Arch'da bunu nasıl çözdüm.
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs pacman -Qo | grep 'No package'
Burada anahtar /usr/lib/python2.7/site-packages
, pip'in yüklediği dizin olan YMMV'dir. pacman -Qo
Arch'ın pac kage man ager dosyasının sahipliğini nasıl kontrol ettiğidir . No package
Hiçbir paket dosyanın sahibi olduğunda o verir dönüş parçasıdır: error: No package owns $FILENAME
. Zor geçici çözüm: Sorgularım __init__.py
çünkü pacman -Qo
dizinler söz konusu olduğunda biraz cahil :(
Diğer dağıtımlar için bunu yapmak için, yüklenen pip
öğelerin nereye yerleştirileceğini (sadece bir sudo pip install
şey), bir dosyanın sahipliğini nasıl sorgulayacağınızı (Debian / Ubuntu yöntemi dpkg -S
) ve "paketin bu yola sahip olmadığı" dönüşü (Debian) / Ubuntu is no path found matching pattern
). Debian / Ubuntu kullanıcıları, dikkat: dpkg -S
sembolik bir bağlantı verirseniz başarısız olur. Sadece kullanarak çöz realpath
. Bunun gibi:
find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | xargs dpkg -S 2>&1 | grep 'no path found'
Fedora kullanıcıları deneyebilir (teşekkürler @eddygeek):
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
dpkg
bir yönlendirme eklemek zorunda kalmadan stderr'a hata yazın 2>&1
. Ve uluslararası çıktı için LANG=
önüne ekleyin xargs dpkg -s
. ve sed
aynı zamanda güzel bir araçtır;) yolun yalnızca paket adını tutmak için. Bu yüzden: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/"
İle başla:
$ pip list
Tüm paketleri listelemek için. İstediğiniz paketi bulduğunuzda şunu kullanın:
$ pip show <package-name>
Bu, klasörü de dahil olmak üzere bu paket hakkında ayrıntıları gösterecektir. Paket adını zaten biliyorsanız ilk bölümü atlayabilirsiniz.
Click burada pip gösteri daha fazla bilgi için ve burada pip listesinde daha fazla bilgi için.
Misal:
$ pip show jupyter
Name: jupyter
Version: 1.0.0
Summary: Jupyter metapackage. Install all the Jupyter components in one go.
Home-page: http://jupyter.org
Author: Jupyter Development Team
Author-email: jupyter@googlegroups.org
License: BSD
Location: /usr/local/lib/python2.7/site-packages
Requires: ipywidgets, nbconvert, notebook, jupyter-console, qtconsole, ipykernel
pip.get_installed_distributions()
kurulu paketlerin bir listesini verecektir
import pip
from os.path import join
for package in pip.get_installed_distributions():
print(package.location) # you can exclude packages that's in /usr/XXX
print(join(package.location, package._get_metadata("top_level.txt"))) # root directory of this package
Aşağıda biraz yavaş, ama pip
farkında olan güzel biçimlendirilmiş paketlerin bir listesini verir . Yani hepsi "pip" tarafından kurulmadı, ama pip ile yükseltilebilmeleri gerekiyor.
$ pip search . | egrep -B1 'INSTALLED|LATEST'
Yavaş olmasının nedeni, tüm pypi deposunun içeriğini listelemesidir. Benzer işlevsellik sağlamayı öneren bir bilet verdim pip list
ancak daha verimli.
Örnek çıktı: (aramayı herkes için '.' Yerine bir alt kümeyle sınırlandırdı.)
$ pip search selenium | egrep -B1 'INSTALLED|LATEST'
selenium - Python bindings for Selenium
INSTALLED: 2.24.0
LATEST: 2.25.0
--
robotframework-selenium2library - Web testing library for Robot Framework
INSTALLED: 1.0.1 (latest)
$
@ Paul Woolcock'un cevabına ek olarak,
pip freeze > requirements.txt
geçerli konumdaki etkin ortamda yüklü sürüm numaralarıyla birlikte tüm yüklü paketlerle bir gereksinim dosyası oluşturur . Koşu
pip install -r requirements.txt
, gereksinimler dosyasında belirtilen paketleri yükleyecektir.
Pip'in daha yeni sürümleri OP'nin pip list -l
veya pip freeze -l
( --list
) üzerinden istediklerini yapma yeteneğine sahiptir .
Debian'da (en azından) man sayfası bunu netleştirmiyor ve sadece - özelliğin var olması gerektiği varsayımı altında - keşfettim pip list --help
.
Bu özelliğin (bazılarında ima edilmiş olmasına rağmen) ya da dokümanlarda ya da mevcut cevaplarda açık olmadığını öne süren son yorumlar var, bu yüzden yayınlamam gerektiğini düşündüm. Bunu bir yorum olarak yapmayı tercih ederdim, ama itibar puanım yok.
pip freeze --local
8 yıldır yaşadığımız ortaya çıkıyor .pip list --local
de kullanılabilir ... ancak OP sorusunun sanal ortamlar ( --local
destekleyici) değil, dağıtım paketlerini paketlerden ayırt etmekle ilgili olduğuna dikkat edin sudo pip install
.
Bilgisayarınızda birden fazla Python sürümü yüklüyse, her biri ile ilişkili birkaç pip sürümünüz olabileceğini unutmayın.
Derneklerinize bağlı olarak, hangi pip komutunu kullandığınız konusunda çok dikkatli olmanız gerekebilir:
pip3 list
Python3.4'ü çalıştırdığım yerde çalıştım. Sadece kullanmak pip list
hatayı döndürdü The program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip
.
@Almenon'un işaret ettiği gibi, bu artık çalışmaz ve kodunuza paket bilgisi almanın desteklenen bir yolu değildir. Aşağıdakiler bir istisna oluşturur:
import pip
installed_packages = dict([(package.project_name, package.version)
for package in pip.get_installed_distributions()])
Bunu yapmak için içe aktarabilirsiniz pkg_resources
. İşte bir örnek:
import pkg_resources
installed_packages = dict([(package.project_name, package.version)
for package in pkg_resources.working_set])
Ben varım v3.6.5
İşte fedora veya diğer rpm dağıtımları için tek astar (@barraponto ipuçlarına dayanarak):
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
Daha temiz çıktı almak için bunu önceki komuta ekleyin:
| sed -r 's:.*/(\w+)/__.*:\1:'
Tüm dosya / klasör adlarını girin site-packages/
(ve dist-packages/
varsa) ve paket aracılığıyla yüklenenleri soymak için paket yöneticinizi kullanın.
pip freeze, pip / easy_install tarafından olmasa bile kurulu tüm paketleri listeler. CentOs / Redhat'da rpm aracılığıyla kurulmuş bir paket bulunur.
Eğer kullanırsanız Anaconda piton dağılımı, kullanabileceğiniz conda list
Ne yöntemle yüklenen görmek için komut:
user@pc:~ $ conda list
# packages in environment at /anaconda3:
#
# Name Version Build Channel
_ipyw_jlab_nb_ext_conf 0.1.0 py36h2fc01ae_0
alabaster 0.7.10 py36h174008c_0
amqp 2.2.2 <pip>
anaconda 5.1.0 py36_2
anaconda-client 1.6.9 py36_0
Tarafından yüklenen girdileri pip
(muhtemelen pip
kendisi dahil ) almak için:
user@pc:~ $ conda list | grep \<pip
amqp 2.2.2 <pip>
astroid 1.6.2 <pip>
billiard 3.5.0.3 <pip>
blinker 1.4 <pip>
ez-setup 0.9 <pip>
feedgenerator 1.9 <pip>
Tabii ki muhtemelen sadece yapabileceğiniz ilk sütunu seçmek istersiniz ( pip
gerekirse hariç ):
user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}'
amqp
astroid
billiard
blinker
ez-setup
feedgenerator
Son olarak, bu değerleri alabilir ve aşağıdakileri kullanarak tümünü kaldırabilirsiniz:
user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}' | xargs pip uninstall -y
Silme onayı vermek zorunda kalmamak için -y
bayrağını kullandığınıza dikkat edin pip uninstall
.
pip list [seçenekler] Referansın tamamını burada görebilirsiniz
Ubuntu (belki de diğerleri) için en az bu (önceki esinlenerek çalışır mesaja Bu thread):
printf "Installed with pip:";
pip list 2>/dev/null | gawk '{print $1;}' | while read; do pip show "${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf " ${REPLY}"; fi; done; echo