Pip ile hangi paket sürümünün yüklü olduğunu bulun


711

Pip kullanarak, şu anda bir paketin hangi sürümünün yüklü olduğunu bulmak mümkün müdür?

Biliyorum pip install XYZ --upgradeama böyle bir şey olup olmadığını merak ediyorum pip info XYZ. Değilse, hangi sürümü kullandığımı söylemenin en iyi yolu ne olurdu.


4
pip'te bir showkomut için bir teklif var : github.com/pypa/pip/issues/33
Hugo Tavares

Yanıtlar:


1015

İtibariyle pip 1.3 , bir var pip showkomut.

$ pip show Jinja2
---
Name: Jinja2
Version: 2.7.3
Location: /path/to/virtualenv/lib/python2.7/site-packages
Requires: markupsafe

Eski sürümlerde pip freezeve grepişi güzel yapmalı.

$ pip freeze | grep Jinja2
Jinja2==2.7.3

8
@techtonik: Mevcut modülleri bir gereksinim.txt dosyasına dondurmak içindir .
Hugo

@Hugo: saveAdı kullanırdım .
anatoly techtonik

5
'Donma' isimlendirmesi tarihseldir - en az 2008 yılına dayanmaktadır . O zamanlar, birçok kişi yakut taşların "dondurulmasına" zaten alışıktı, bu yüzden pip o zamanlar yaygın olarak kullanılan ismi ödünç aldı.
AdamKG

2
bu açık değildi ya da belgelenmiş değildi, ama beklediğimden pip show pipziyade pip'in sürüm bilgilerini almak için yazabilirsiniz pip --version.
Marc Maxmeister

pip freeze, düzenlenebilir VCS ödeme sürümlerini doğru bir şekilde gösterme avantajına sahiptir, ancak göstermez pip show.
spookylukey


43

Pip 1.3 şimdi de bir liste komutuna sahip:

$ pip list
argparse (1.2.1)
pip (1.5.1)
setuptools (2.1)
wsgiref (0.1.2)

Paket adının X olduğunu söyle. Sürümü bulmak için - Pip listesinin kullanılması ile içe aktarma X ile X .__ sürüm__ arasındaki fark nedir? Her ikisi de paket sürümler mi?
değişken

her ikisi de geçerlidir, ancak pip listgeneldir ve __version__değildir. Ayrıca gördüm version()ve get_version()ithal edilen için.
RickyA

35

ve --outdated ek bir argüman olarak, kullandığınız paketlerin Güncel ve Son sürümlerini alırsınız:

$ pip list --outdated
distribute (Current: 0.6.34 Latest: 0.7.3)
django-bootstrap3 (Current: 1.1.0 Latest: 4.3.0)
Django (Current: 1.5.4 Latest: 1.6.4)
Jinja2 (Current: 2.6 Latest: 2.8)

AdamKG'nin cevabı ile birleşince:

$ pip list --outdated | grep Jinja2
Jinja2 (Current: 2.6 Latest: 2.8)

Pip araçlarını da kontrol edin : https://github.com/nvie/pip-tools


1
İlginç bir seçenek. Hepsini listelemeyi tercih ederim ve bunlardan herhangi birinin modası geçmiş olup olmadığını bana bildirin.
ArtOfWarfare

17

Ayrıca yükleyebilir yolkve daha sonra yolk -lda güzel bir çıktı veren çalıştırabilirsiniz . İşte benim küçük virtualenv için ne olsun:

(venv)CWD> /space/vhosts/pyramid.xcode.com/venv/build/unittest 
project@pyramid 43> yolk -l
Chameleon       - 2.8.2        - active 
Jinja2          - 2.6          - active 
Mako            - 0.7.0        - active 
MarkupSafe      - 0.15         - active 
PasteDeploy     - 1.5.0        - active 
Pygments        - 1.5          - active 
Python          - 2.7.3        - active development (/usr/lib/python2.7/lib-dynload)
SQLAlchemy      - 0.7.6        - active 
WebOb           - 1.2b3        - active 
account         - 0.0          - active development (/space/vhosts/pyramid.xcode.com/project/account)
distribute      - 0.6.19       - active 
egenix-mx-base  - 3.2.3        - active 
ipython         - 0.12         - active 
logilab-astng   - 0.23.1       - active 
logilab-common  - 0.57.1       - active 
nose            - 1.1.2        - active 
pbkdf2          - 1.3          - active 
pip             - 1.0.2        - active 
pyScss          - 1.1.3        - active 
pycrypto        - 2.5          - active 
pylint          - 0.25.1       - active 
pyramid-debugtoolbar - 1.0.1        - active 
pyramid-tm      - 0.4          - active 
pyramid         - 1.3          - active 
repoze.lru      - 0.5          - active 
simplejson      - 2.5.0        - active 
transaction     - 1.2.0        - active 
translationstring - 1.1          - active 
venusian        - 1.0a3        - active 
waitress        - 0.8.1        - active 
wsgiref         - 0.1.2        - active development (/usr/lib/python2.7)
yolk            - 0.4.3        - active 
zope.deprecation - 3.5.1        - active 
zope.interface  - 3.8.0        - active 
zope.sqlalchemy - 0.7          - active 

9

Öğrenmek için grep komutunu kullanabilirsiniz.

pip show <package_name>|grep Version

Misal:

pip show urllib3|grep Version

yalnızca sürümleri gösterecektir.

Meta Veri-Sürüm: 2.0
Sürüm: 1.12


8

En kolay yol şudur:

import jinja2
print jinja2.__version__

7
Bu yalnızca __version__kaynak kodlarında tanımlanan paketler için geçerlidir . Birçok paket bunu yapmaz.
spookylukey

Bu sürümü paketleme sırasında dahil etmek ya da yalnızca setup.py dosya sürümü parametresinde sürümün olması iyi bir uygulamadır?
değişken

Bu yöntem ayrıca beklenen girdi importve çıktıları arasında paket adlandırma tutarsızlıklarına (en az 3 tip vardır) dayanıklı değildir pip freeze.
mirekphd

6

Bir araç da var denilen pip-checksize tüm yüklü paketler ve onların güncelleme durumunu hızlı bir bakış sağlar:

resim açıklamasını buraya girin

Kendim kullanmadım; sadece ve bu SO sorusunu hızla üst üste tökezledi ve bahsedilmediğinden beri ...


Pencerelerde nasıl çalıştırılır
vela

1
@vela Windows'da tamamen aynı şekilde çalışacağını umuyorum. Elbette , herhangi bir sistemde yaptığınız gibi ilk önce yüklemeniz gerekir .
Ola Tuvesson

5

Windows'da aşağıdaki gibi komutlar verebilirsiniz:

pip show setuptools | findstr "Version"

Çıktı:

Version: 34.1.1

2

Yalnızca paket sürümünü makine tarafından okunabilir biçimde döndüren python işlevi:

from importlib.metadata import version 
version('numpy')

Python 3.8'den önce:

pip install importlib-metadata 
from importlib_metadata import version
version('numpy')

Bash eşdeğeri (burada da python'dan çağrılır) çok daha karmaşık olurdu (ancak daha sağlam - aşağıdaki uyarıya bakın):

import subprocess
def get_installed_ver(pkg_name):
    bash_str="pip freeze | grep -w %s= | awk -F '==' {'print $2'} | tr -d '\n'" %(pkg_name)
    return(subprocess.check_output(bash_str, shell=True).decode())

Örnek kullanım:

# pkg_name="xgboost"
# pkg_name="Flask"
# pkg_name="Flask-Caching"
pkg_name="scikit-learn"

print(get_installed_ver(pkg_name))
>>> 0.22

Her iki durumda da pkg_nameparametrenin, paket adını döndürülen biçiminde içermesi gerektiğini , örneğin pip freezekullanılmadığı veya kullanılmadığı sırada kullanmaması gerektiğini unutmayın .importscikit-learnsklearnFlask-Cachingflask_caching

pip freezeBash versiyonunda çağırmak verimsiz görünse de, sadece bu yöntemin, adlandırma özelliklerini ve tutarsızlıklarını paketlemek için yeterince sağlam olduğunu kanıtlayın (örneğin, alt çizgi, tire ve tire, küçük büyük harfler ve sklearnvs gibi kısaltmalar scikit-learn).

Dikkat: Karmaşık ortamlarda her iki değişken de, gerçekte elde edebileceğiniz şeylerle tutarsız sürpriz sürüm numaraları döndürebilir import.

Böyle bir sorun, paketin bir kullanıcı site-packages alt klasöründe gizlenmiş başka sürümleri olduğunda ortaya çıkar . Kullanmanın tehlikelerinin bir örneği olarak version()burada karşılaştığım bir durum:

$ pip freeze | grep lightgbm
lightgbm==2.3.1

and

$ python -c "import lightgbm; print(lightgbm.__version__)"
2.3.1

vs.

$ python -c "from importlib_metadata import version; print(version(\"lightgbm\"))"
2.2.3

until you delete the subfolder with the old version (here 2.2.3) from the user folder (only one would normally be preserved by `pip` - the one installed as last with the `--user` switch):

$ ls /home/jovyan/.local/lib/python3.7/site-packages/lightgbm*
/home/jovyan/.local/lib/python3.7/site-packages/lightgbm-2.2.3.dist-info
/home/jovyan/.local/lib/python3.7/site-packages/lightgbm-2.3.1.dist-info

Başka bir sorun da aynı ortamda bazı yüklü paketlerin olması. Bağımlılıkları pip-yüklü paketlerinizle paylaşıyorsa ve bu bağımlılıkların sürümleri farklıysa, pip-yüklü bağımlılıklarınızın sürümlerini düşürebilirsiniz.

Açıklamak gerekirse, numpy04-01-2020 tarihinde PyPI'de mevcut olan en son sürüm 1.18.0 iken, Anaconda'nın conda-forgekanalı numpyen son sürüm olarak yalnızca 1.17.3 sürümüne sahipti . Bu nedenle basemap, conda (ikinci olarak) içeren bir paket yüklediğinizde , daha önce pip yüklü numpyolanınız conda tarafından 1.17.3'e düşürülür ve 1.18.0 sürümü importişleve kullanılamaz hale gelir . Bu durumda version()doğru ve pip freeze/ conda listyanlış olur:

$ python -c "from importlib_metadata import version; print(version(\"numpy\"))"
1.17.3

$ python -c "import numpy; print(numpy.__version__)"
1.17.3

$ pip freeze | grep numpy
numpy==1.18.0

$ conda list | grep numpy
numpy                     1.18.0                   pypi_0    pypi

1
Neden kullanmıyorsunuz importlib.metadata.version('NameOfProject')? docs.python.org/3/library/…
sinoroc

1
Harika bulmak @sinoroc! Ben bir cevap olarak göndermek gerektiğini düşünüyorum, ve benim oldukça overengineered bir silecek :) Sample PoC: from importlib_metadata import version; version('Flask-Caching')
mirekphd

1
Bunun için gitmene izin vereceğim
sinoroc

En son düzenlemelerin beni şaşırtıyor. Deneyebilir python -c "import pkg_resources; print(pkg_resources.get_distribution('lightgbm').version)"misin?
sinoroc

Bu size doğru cevabı verir - version()en eski (en eski) olanı (2.2.3) döndürdüğünde yüklü olan en son sürüm (2.3.1 ). Bu sonucu, her iki sürümü de --useranahtarla yükleyerek , ancak lightgbm-2.2.3.dist-infoher ikisini birlikte listelemek için, yukarıda listelendiği gibi manuel olarak koruyarak çoğaltabilirsiniz (pip normalde kaldırır).
mirekphd

1

pip show python 3.7 çalışır:

pip show selenium
Name: selenium
Version: 4.0.0a3
Summary: Python bindings for Selenium
Home-page: https://github.com/SeleniumHQ/selenium/
Author: UNKNOWN
Author-email: UNKNOWN
License: Apache 2.0
Location: c:\python3.7\lib\site-packages\selenium-4.0.0a3-py3.7.egg
Requires: urllib3
Required-by:

Bu standart bir cevap değil.
hamed baziyad

1

Bunu Python kodunu kullanarak yapmak için:

kullanma importlib.metadata.version

Python .83.8

import importlib.metadata
importlib.metadata.version('beautifulsoup4')
'4.9.1'

Python .73.7

(kullanarak importlib_metadata.version)

!pip install importlib-metadata

import importlib_metadata
importlib_metadata.version('beautifulsoup4')
'4.9.1'

kullanma pkg_resources.Distribution

import pkg_resources
pkg_resources.get_distribution('beautifulsoup4').version
'4.9.1'
pkg_resources.get_distribution('beautifulsoup4').parsed_version
<Version('4.9.1')>

Yorumlar sinoroc ve mirekphd tarafından .


0

Windows için şunları yapabilirsiniz:

  1. cmd'yi açın ve python yazın, enter tuşuna basın.

  2. içe aktarmayı yazın ve enter tuşuna basın.

  3. ._version__ yazın ve enter tuşuna basın.

Burada ekran görüntüsünde gördüğünüz gibi seri modülün sürümünü kontrol etmek için bu yöntemi kullanıyorum.

görüntü



0

Söz konusu işletim sisteminde hangi OS kullanıcısının (Windows / Linux / Mac) kullanıldığından bahsedilmiyor

Mac ve Linux'ta kusursuz bir şekilde çalışacak birkaç cevap olduğu için.

Aşağıdaki komut, kullanıcının pencerelerde bir python paketinin sürümünü bulmaya çalışması durumunda kullanılabilir.

PowerShell'de aşağıdaki komutu kullanın:

pip list | findstr <PackageName>

Misal:- pip list | findstr requests

Çıktı : requests 2.18.4

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.