Yanıtlar:
İ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
saveAdı kullanırdım .
pip show pipziyade pip'in sürüm bilgilerini almak için yazabilirsiniz pip --version.
pip freeze, düzenlenebilir VCS ödeme sürümlerini doğru bir şekilde gösterme avantajına sahiptir, ancak göstermez pip show.
Ben sadece Hugo Tavares dedi geliştirme ile pip bir çekme isteği gönderdi:
(örnek olarak specloud)
$ pip show specloud
Package: specloud
Version: 0.4.4
Requires:
nose
figleaf
pinocchio
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)
pip listgeneldir ve __version__değildir. Ayrıca gördüm version()ve get_version()ithal edilen için.
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
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
En kolay yol şudur:
import jinja2
print jinja2.__version__
__version__kaynak kodlarında tanımlanan paketler için geçerlidir . Birçok paket bunu yapmaz.
importve çıktıları arasında paket adlandırma tutarsızlıklarına (en az 3 tip vardır) dayanıklı değildir pip freeze.
Bir araç da var denilen pip-checksize tüm yüklü paketler ve onların güncelleme durumunu hızlı bir bakış sağlar:
Kendim kullanmadım; sadece ve bu SO sorusunu hızla üst üste tökezledi ve bahsedilmediğinden beri ...
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
importlib.metadata.version('NameOfProject')? docs.python.org/3/library/…
from importlib_metadata import version; version('Flask-Caching')
python -c "import pkg_resources; print(pkg_resources.get_distribution('lightgbm').version)"misin?
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).
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:
Bunu Python kodunu kullanarak yapmak için:
importlib.metadata.versionimport importlib.metadata
importlib.metadata.version('beautifulsoup4')
'4.9.1'
(kullanarak importlib_metadata.version)
!pip install importlib-metadata
import importlib_metadata
importlib_metadata.version('beautifulsoup4')
'4.9.1'
pkg_resources.Distributionimport 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 .
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
showkomut için bir teklif var : github.com/pypa/pip/issues/33