Easy_install / pip ile kurulan tüm paketleri bul?


Yanıtlar:


381

pip freezekurulu 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


89
Sürüm 1.3 itibariyle 'pip list' eklendi. Aşağıdaki yanıtı ve belgeleri burada görebilirsiniz: pip-installer.org/en/latest/usage.html#pip-list
keybits

7
çıktıları farklı formatları listeleyip dondurur (yazma zamanından itibaren). Donma çıktısı ortamları yeniden oluşturmak için kullanılabilir: docs.python-guide.org/tr/latest/dev/virtualenvs/#other-notes
Tom Saleeba

18
pip freezeve pip listher şeyi listeler. Tarafından yüklenmemiş paketleri hariç tutmazlar pip.
Eliad

Ayrıca pip freezekomut dosyalarında güvenilir buluyorum , oysa pip listborularla birlikte kullanıldığında beklenmedik hatalar üretecek.
Dale Anderson

2
(?) Yeni pip list -lveya pip list --local, en iyi yanıtı bakın stackoverflow.com/a/43012269/491884 @MJB tarafından
jmuc

255

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/


3
Gentoo, bu listeler her paketleri, pip dışındaki araçlarla yüklü hatta. Bu, soruda istendiği gibi, diğer sistemlerde pip olmayan modülleri gerçekten hariç tutuyor mu?
jlh

Bunun biraz farklı olduğunu unutmayınpip freeze
sg

1
pip list --useryalnızca kullanıcı tarafından kurulan paketleri gösterir ve sistem çapında paketleri hariç tutar.
Jacob Hume

138

Merak eden biri varsa 'pip show' komutunu kullanabilirsiniz.

pip show [options] <package>

Bu, verilen paketin kurulum dizinini listeler.


24

Son Ubuntu sürümleri gibi Debian davranacağını ilişkin ise pip installvarsayılan hedefi, ölü kolay: o kadar yükler /usr/local/lib/yerine /usr/lib( aptvarsayı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 -QoArch'ın pac kage man ager dosyasının sahipliğini nasıl kontrol ettiğidir . No packageHiç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 -Qodizinler 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 -Ssembolik 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'

2
+1 Arch tek katlı için çok teşekkürler, tam da aradığım şey buydu. Bu arada, meraklı gerçek: Arch kurulumum İtalyanca olarak yerelleştirildi, ancak grep, 'Paket yok' için selamlasam bile 'Nessun pacchetto' ('Paket yok' için İtalyanca) yazan satırları doğru bir şekilde 'atladı'. Nasıl olur?
Nadir Sampaoli

1
@barraponto @NadirSampaoli grep benim durumumda hiçbir şey yapmıyor. Çünkü grep, stdout'ta grep'i denemeye çalışır, ancak dpkgbir 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 sedaynı 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/"
David Boho

1
merhaba, bunu yanlışlıkla düşürdüm ve sadece fark ettim ve şimdi seçmen kilitlendi. Teşekkürler
Jonathan

22

İ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    

En iyi cevap IMHO. Paket adını biliyorsanız gerçekten basit ve hızlı. pip list bile gerekli değildir ve donma uzun zaman alabilir ve umurumda olmayan şeyleri filtrelemek zorundayım. Basit: pip show my_packge
ChuckZ

8

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

2
Bu artık çalışmaz. Bkz. Github.com/pypa/pip/issues/5243 Bunun yerine şunları kullanmalısınız: pkg_resources.working_set içinde d için import pkg_resources [print (d.project_name)]
Almenon

6

Aşağıda biraz yavaş, ama pipfarkı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 listancak 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)
$

Neden bileti kendiniz dosyalamıyorsunuz?
lajarre

1
Görünüşe göre pip'in sonraki sürümünde yeni bir liste komutu olacak: pip-installer.org/en/latest/usage.html#pip-list
MarkHu

5

@ 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.


5

Pip'in daha yeni sürümleri OP'nin pip list -lveya 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.


1
pip freeze --local8 yıldır yaşadığımız ortaya çıkıyor .pip list --localde kullanılabilir ... ancak OP sorusunun sanal ortamlar ( --localdestekleyici) değil, dağıtım paketlerini paketlerden ayırt etmekle ilgili olduğuna dikkat edin sudo pip install.
Capi Etheriel

4

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 listhatayı döndürdü The program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip.


pip python2.7 içindir, pip3 python3.x içindir
mjp

3

@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


2

İş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:'

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.


1

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.


1

Eğer kullanırsanız Anaconda piton dağılımı, kullanabileceğiniz conda listNe 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 pipkendisi 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 ( pipgerekirse 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 -ybayrağını kullandığınıza dikkat edin pip uninstall.


1

Pip yüklü olmayanlar için, ben bu hızlı senaryoyu bulunan github (Python 2.7.13 ile çalışır):

import pkg_resources
distros = pkg_resources.AvailableDistributions()
for key in distros:
  print distros[key]


0

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.