Відповіді:
Станом на pip 1.3 є pip show
команда.
$ pip show Jinja2
---
Name: Jinja2
Version: 2.7.3
Location: /path/to/virtualenv/lib/python2.7/site-packages
Requires: markupsafe
У старих версіях pip freeze
і grep
повинні робити цю роботу добре.
$ pip freeze | grep Jinja2
Jinja2==2.7.3
save
ім'я.
pip show pip
щоб отримати інформацію про версію файлу, а не pip --version
як я очікував.
pip freeze
має перевагу в тому, що він коректно показує редаговані версії для оформлення замовлення VCS, а pip show
ні.
Я щойно надіслав запит на витяг у піп, із покращенням. Уго Таварес сказав:
(зразок як приклад)
$ pip show specloud
Package: specloud
Version: 0.4.4
Requires:
nose
figleaf
pinocchio
Pip 1.3 тепер також має команду списку :
$ pip list
argparse (1.2.1)
pip (1.5.1)
setuptools (2.1)
wsgiref (0.1.2)
pip list
є загальними, і __version__
ні. Я також бачив version()
і get_version()
для імпортного.
а з додатком - оновленим як додатковий аргумент, ви отримаєте Поточну та останню версії пакетів, які ви використовуєте:
$ 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:
$ pip list --outdated | grep Jinja2
Jinja2 (Current: 2.6 Latest: 2.8)
Перевірте також піп-інструменти : https://github.com/nvie/pip-tools
Ви також можете встановити yolk
та запустити, yolk -l
що також дає хороший вихід. Ось що я отримую за свій маленький віртуаленв:
(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
Найпростіший спосіб:
import jinja2
print jinja2.__version__
__version__
у їх вихідному коді. Багато пакетів цього не роблять.
import
та виходом pip freeze
.
Існує також інструмент,pip-check
який називається, який дає вам швидкий огляд усіх встановлених пакетів та їх статусу оновлення:
Я не використовував його сам; просто наткнувся на це та це питання ТАК швидко, а про нього не згадували ...
Функція python, що повертає лише версію пакета в машиночитаному форматі:
from importlib.metadata import version
version('numpy')
До пітона 3.8:
pip install importlib-metadata
from importlib_metadata import version
version('numpy')
Еквівалент bash (тут також посилаються на python) був би набагато складнішим (але більш надійним - див. Обережність нижче):
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())
Використання зразка:
# pkg_name="xgboost"
# pkg_name="Flask"
# pkg_name="Flask-Caching"
pkg_name="scikit-learn"
print(get_installed_ver(pkg_name))
>>> 0.22
Зверніть увагу , що в обох випадках pkg_name
параметр повинен містити ім'я пакета в форматі, що повертається , pip freeze
а не використовувати під час import
, наприклад , scikit-learn
НЕ sklearn
або Flask-Caching
, що неflask_caching
.
Зауважте, що хоча виклик pip freeze
у версії bash може здатися неефективним, лише цей метод виявляється достатньо надійним щодо особливостей та невідповідностей іменування пакету (наприклад, підкреслення проти тире, малих та великих букв та скорочень, таких як sklearn
vsscikit-learn
).
Застереження: в складних умовах обидва варіанти можуть повертати сюрпризні номери версій, що не відповідають тому, що ви можете отримати протягом import
.
Одна з таких проблем виникає, коли існують інші версії пакету, приховані в підпапці користувача site-packages
. Як ілюстрацію небезпеки використання version()
ось такої ситуації я зіткнувся:
$ 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
Інша проблема полягає в наявності деяких пакетів, встановлених conda, в одному середовищі. Якщо вони діляться залежностями з встановленими вами пакетами pip, а версії цих залежностей відрізняються, ви можете отримати пониження рівня встановлених pip залежностей.
Для ілюстрації, остання версія, numpy
доступна в PyPI 04-01-2020 р., Становила 1,18,0, тоді як в той же час conda-forge
канал Anaconda мав лише останню версію 1.17.3 numpy
. Отже, коли ви встановили basemap
пакет з conda (як другий), ваш попередньо встановлений pip numpy
зменшиться на conda до 1.17.3, а версія 1.18.0 стане недоступною для import
функції. У цьому випадку version()
було б правильно і pip freeze
/ conda list
неправильно:
$ 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)"
?
version()
все-таки повертається найдавніша (найстаріша) версія (2.2.3). Ви можете скопіювати цей результат, встановивши обидві версії за допомогою --user
перемикача, але зберігши вручну lightgbm-2.2.3.dist-info
папку, щоб обидві вони були разом, як зазначено вище (pip, як правило, видаляє її, доки вона не стане ).
піп-шоу працює в python 3.7:
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:
Для цього використовуйте код Python:
importlib.metadata.version
import importlib.metadata
importlib.metadata.version('beautifulsoup4')
'4.9.1'
(за допомогою 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')>
Зазначений за коментарі sinoroc та mirekphd .
pip install
та підкреслення - ви можете скопіювати її дослівно з моєї або змінити numpy
на beautifulsoup4
послідовну.
Питання не зазначається, який користувач ОС використовує (Windows / Linux / Mac)
Оскільки є кілька відповідей, які працюватимуть бездоганно на Mac та Linux.
Команда нижче може бути використана у випадку, якщо користувач намагається знайти версію пакету python у Windows.
У PowerShell використовуйте команду нижче:
pip list | findstr <PackageName>
Приклад: - pip list | findstr requests
Вихід: requests 2.18.4
show
команди в pip: github.com/pypa/pip/isissue/33