Я только что установил модули python: construct
и statlib
с помощью setuptools
следующим образом:
# Install setuptools to be able to download the following
sudo apt-get install python-setuptools
# Install statlib for lightweight statistical tools
sudo easy_install statlib
# Install construct for packing/unpacking binary data
sudo easy_install construct
Я хочу иметь возможность (программно) проверить их версии. Есть ли эквивалент python --version
, который я могу запустить из командной строки?
Моя версия python - 2.7.3
.
Я предлагаю использовать pip вместо easy_install. С помощью pip вы можете перечислить все установленные пакеты и их версии с помощью команды
pip freeze
В большинстве систем linux вы можете передать это в grep
(или findstr
в Windows), чтобы найти строку для конкретного пакета, который вас интересует:
Linux:
$ pip freeze | grep lxml
lxml==2.3
Windows:
c:\> pip freeze | findstr lxml
lxml==2.3
Для отдельного модуля можно попробовать использовать атрибут __version__
, однако есть модули и без него:
$ python -c "import requests; print(requests.__version__)"
2.14.2
$ python -c "import lxml; print(lxml.__version__)"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute '__version__'
Наконец, поскольку команды в вашем вопросе имеют префикс sudo
, похоже, что вы устанавливаете в глобальное окружение python. Настоятельно советую посмотреть менеджеры виртуального окружения python, например virtualenvwrapper.
Вы можете попробовать
>>> import statlib
>>> print statlib.__version__
>>> import construct
>>> print contruct.__version__
Модуль использовать pkg_resources
распространяется с библиотека setuptools
. Обратите внимание, что строка, которую вы передаете в get_distribution
метод должен соответствовать записи PyPI.
>>> import pkg_resources
>>> pkg_resources.get_distribution("construct").version
'2.5.2'
и если вы хотите запустить его из командной строки, вы можете сделать:
python -c "import pkg_resources; print(pkg_resources.get_distribution('construct').version)"
Обратите внимание, что строку, которую вы передаете в get_distribution метода должно быть имя пакета в качестве зарегистрированных в PyPI, а не название модуля, который вы пытаетесь импортировать.
К сожалению, это не'т всегда одинакова (например, вы делаете Пип установить memcached
, но импорт с memcache
).
Я думаю, это может помочь, но сначала установите пакет show
, чтобы запустить pip show
, затем используйте show для поиска версии!
sudo pip install show
# in order to get package version execute the below command
sudo pip show YOUR_PACKAGE_NAME | grep Version
Лучший способ сделать это:
Для деталей определенного пакета
пип-шоу <имя_пакета>
Это подробности из имя_пакета, версия, автор, место и т. д.
$ pip show numpy
Name: numpy
Version: 1.13.3
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: [email protected]
License: BSD
Location: c:\users\prowinjvm\appdata\local\programs\python\python36\lib\site-packages
Requires:
<б>для получения более подробной информации: </б>`>>> Пип помочь
<ч>
типун
должны быть обновлены, чтобы сделать это.
pip install --upgrade pip
На Windows рекомендую команды:
python -m pip install --upgrade pip
В питон3 с квадратными скобками вокруг печати
>>> import celery
>>> print(celery.__version__)
3.1.14
`модуль.версия - это хорошее первое, что нужно попробовать, но это вовсе'т всегда работает.
Если вы Don'т хотите раскошеливаться, и вы're через Пип 8 или 9, вы все еще можете использовать Пип.get_installed_distributions()
для получения версии в Python:
обновление: решение здесь работает в пип 8 и 9, но в 10 Пип функция была перенесена из Пип.get_installed_distributions
в пункта._internal.а utils.накл.get_installed_distributions
, чтобы явно указать, что это's не для наружного применения. Это's не хорошая идея, чтобы полагаться на это, если вы're через Пип 10+.
в
import pip
pip.get_installed_distributions() # -> [distribute 0.6.16 (...), ...]
[
pkg.key + ': ' + pkg.version
for pkg in pip.get_installed_distributions()
if pkg.key in ['setuptools', 'statlib', 'construct']
] # -> nicely filtered list of ['setuptools: 3.3', ...]
Использовать реж ()
, чтобы выяснить, если модуль имеет атрибутверсия ` на все.
>>> import selenium
>>> dir(selenium)
['__builtins__', '__doc__', '__file__', '__name__',
'__package__', '__path__', '__version__']
>>> selenium.__version__
'3.141.0'
>>> selenium.__path__
['/venv/local/lib/python2.7/site-packages/selenium']
Вы можете использовать importlib_metadata
библиотека для этого.
Если вы'вновь на Python <3.8
, сначала установите его с:
установите типун importlib_metadata
Начиная с версии Python 3.8
это's в комплекте в стандартной библиотеке.
Затем, чтобы проверить пакет's версии (в данном примере библиотека lxml
) выполнить:
``
от importlib_metadata импорт версия версия('библиотека lxml') '4.3.1' ``
Имейте в виду, что это работает только для установленных пакетов из PyPI. Кроме того, вы должны передать имя пакета в качестве аргумента версия
метод, а не название модуля, который этот пакет содержит (хотя они'вновь, как правило, совпадают).
Если вышеперечисленные способы не работают, стоит попробовать следующее в Python:
import modulename
modulename.version
modulename.version_info
См https://stackoverflow.com/questions/31146153/get-python-tornado-version/31146188
Записки .версия
работал для меня на несколько другие, кроме торнадо, а также.
сначала добавьте питона, Типун вам на "переменные среды". так что вы можете выполнить ваши команды из командной строки. затем просто дать питон команда. затем импортировать пакет
-->scrapy импорт
затем напечатайте имя версии
--> печать(scrapy.версия)`
Это, безусловно, работать
Предполагая, что мы используем ноутбук Jupyter (если через терминал, удалите восклицательные знаки):
!pip show xgboost
!pip freeze | grep xgboost
!pip list | grep xgboost
!conda list caffe
Некоторые модули Дон'т иметь атрибутверсия, поэтому самый простой способ это проверить в терминале: список Пип
(см. также https://stackoverflow.com/a/56912280/7262247)
Я нахожу это весьма ненадежен в использовании различных инструментов (в том числе и лучший pkg_resources
, упомянутых Якуб Кукуль' ответить), а большинство из них не покрывают всех случаях. Например
Поскольку нам нужен надежный способ, чтобы получить версию любой пакет, модуль или подмодуль, я закончил писать функции getversion. Он довольно прост в использовании:
from getversion import get_module_version
import foo
version, details = get_module_version(foo)
См. В документации для деталей.
Это работает в Jupyter ноутбука на Windows, тоже! Пока Jupyter запускается в Баш-совместимой командной строки, таких как bash ЖКТ (MingW64), решений, принятых в многие ответы могут быть использованы в тетради Jupyter на Windows-системах с одной крошечной настройкой.
Я'м управлением Windows 10 Pro с Python установлен через Анаконда, и следующий код работает, когда я запустить Jupyter с помощью Git Баш (но не когда я запускаю из анаконды подскажут).
Твик: добавить восклицательный знак (!
) перед Пип
, чтобы сделать это!типун`.
>>>!pip show lxml | grep Version
Version: 4.1.0
>>>!pip freeze | grep lxml
lxml==4.1.0
>>>!pip list | grep lxml
lxml 4.1.0
>>>!pip show lxml
Name: lxml
Version: 4.1.0
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
Home-page: http://lxml.de/
Author: lxml dev team
Author-email: [email protected]
License: BSD
Location: c:\users\karls\anaconda2\lib\site-packages
Requires:
Required-by: jupyter-contrib-nbextensions
Чтобы получить список нестандартных (ПГИ) модулей импортировать в текущем модуле:
[{pkg.key : pkg.version} for pkg in pip.get_installed_distributions()
if pkg.key in set(sys.modules) & set(globals())]
Результат:
>>> import sys, pip, nltk, bs4
>>> [{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() if pkg.key in set(sys.modules) & set(globals())]
[{'pip': '9.0.1'}, {'nltk': '3.2.1'}, {'bs4': '0.0.1'}]
Примечание:
Этот код был введен вместе с решениями, как на этой странице и https://stackoverflow.com/questions/4858100/how-to-list-imported-modules
Программа Quick Python для список всех упаковочных комплектах (вы можете скопировать его в requirements.txt)
from pip._internal.utils.misc import get_installed_distributions
print_log = ''
for module in sorted(get_installed_distributions(), key=lambda x: x.key):
print_log += module.key + '~=' + module.version + '\n'
print(print_log)
Выходные данные будут выглядеть так:
asn1crypto~=0.24.0
attrs~=18.2.0
automat~=0.7.0
beautifulsoup4~=4.7.1
botocore~=1.12.98
В Python версии 3.8 появилась новая метаданные
модуль в пакет importlib, которые могут сделать это также.
Вот пример из документации:
>>> from importlib.metadata import version
>>> version('requests')
'2.22.0'
Опираясь на Якуб Кукуль'ы ответ я нашел более надежный способ решить эту проблему.
Основная проблема такого подхода заключается в том, что требует, чтобы пакеты были установлена на "условно" и (не используя пункт Установить-пользователь`), или находиться в системном пути на питона инициализации.
Чтобы обойти это, вы можете использовать pkg_resources.find_distributions(path_to_search)
. Это в основном ищет дистрибутивы, которые будут импортированы, если path_to_search в системном пути.
Мы можем перебирать этот генератор так:
avail_modules = {}
distros = pkg_resources.find_distributions(path_to_search)
for d in distros:
avail_modules[d.key] = d.version
Это будет вернуть, что модули словарь в качестве ключей и их версии, как ценность. Этот подход может быть расширен гораздо больше, чем номер версии.
Благодаря Якуб Кукуль для указывая в нужном направлении