Yanıtlar:
İtibariyle pip 1.3 , bir var pip show
komut.
$ 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 freeze
ve grep
işi güzel yapmalı.
$ pip freeze | grep Jinja2
Jinja2==2.7.3
save
Adı kullanırdım .
pip show pip
ziyade 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 list
geneldir 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 yolk
ve daha sonra yolk -l
da 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.
import
ve çı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-check
size 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_name
parametrenin, paket adını döndürülen biçiminde içermesi gerektiğini , örneğin pip freeze
kullanılmadığı veya kullanılmadığı sırada kullanmaması gerektiğini unutmayın .import
scikit-learn
sklearn
Flask-Caching
flask_caching
pip freeze
Bash 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 sklearn
vs 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, numpy
04-01-2020 tarihinde PyPI'de mevcut olan en son sürüm 1.18.0 iken, Anaconda'nın conda-forge
kanalı numpy
en 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ü numpy
olanınız conda tarafından 1.17.3'e düşürülür ve 1.18.0 sürümü import
işleve kullanılamaz hale gelir . Bu durumda version()
doğru ve pip freeze
/ conda list
yanlış 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 --user
anahtarla yükleyerek , ancak lightgbm-2.2.3.dist-info
her 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.version
import 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.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 .
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
show
komut için bir teklif var : github.com/pypa/pip/issues/33