Я только что установил модули 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
я могу запустить из командной строки?
Мой питон версия 2.7.3
.
pip list
Ответы:
Я предлагаю использовать pip вместо easy_install . С помощью pip вы можете получить список всех установленных пакетов и их версий:
В большинстве систем Linux вы можете передать это
grep
(илиfindstr
в Windows), чтобы найти строку для конкретного пакета, который вас интересует:Для отдельного модуля вы можете попробовать
__version__
атрибут , однако есть модули без него:Наконец, так как команды в вашем вопросе имеют префикс
sudo
, кажется, вы устанавливаете в глобальную среду Python. Настоятельно рекомендуем взглянуть на менеджеров виртуальной среды python , например virtualenvwrapperисточник
pip show lxml | grep Version
; это будет работать намного быстрее, так как он проверяет только один пакет.pip list | grep lxml
grep
в окнах? С замораживанием пунктов | grep lxml не работает на windwos.pip list | findstr lxml
Ты можешь попробовать
источник
inspect
) не имеют__version__
атрибута, к сожалению.serial.VERSION
. Возможно, есть и другие часто используемые модули, которые не соответствуют PEP 0396: python.org/dev/peps/pep-0396print(contruct.__version__)
при использовании Python 3. *Используйте
pkg_resources
модуль, распространяемый вместе сsetuptools
библиотекой. Обратите внимание, что строка, которую вы передаетеget_distribution
методу, должна соответствовать записи PyPI.и если вы хотите запустить его из командной строки, вы можете сделать:
Обратите внимание, что строка, передаваемая
get_distribution
методу, должна быть именем пакета, зарегистрированным в PyPI, а не именем модуля, который вы пытаетесь импортировать.К сожалению, они не всегда одинаковы (например, вы делаете
pip install memcached
, ноimport memcache
).источник
__version__
.construct.version.full_version
pkg_resources.get_distrinbution
это не всегда работает.DistributionNotFound
Выдает какое-то исключение с сообщением об ошибке, например: «Распределение the_package_name» не найдено и требуется приложением »get_distribution
методу имя модуля вместо имени пакетаЯ думаю, что это может помочь, но сначала установите
show
пакет, чтобы запустить, аpip show
затем используйте шоу, чтобы найти версию!источник
pip: error: No command by the name pip show (maybe you meant "pip install show")
pip show PACKAGE | awk '/^Version: / {sub("^Version: ", ""); print}'
. Вероятно, вы могли бы обойтись без более простого скрипта AWK, но вышеупомянутое будет безопаснее для любых крайних случаев.pip show
был реализован в пипе 1.2.1.post1 . Вы используете ужасно устаревшую версию pip, поэтому неудивительно, что у вас возникли проблемы! В настоящее время я использую pip 7.1.2 . Если что-то мешает вам обновить, вы всегда можете просто установить его локально или в virtualenv.Лучший способ сделать это:
Для деталей конкретного пакета
pip show <package_name>
Больше подробностей:
>>> pip help
pip
должен быть обновлен, чтобы сделать это.В Windows рекомендуем команду:
источник
pip show scikit-learn
вместоpip show sklearn
. sklearn - это краткая форма, используемая при импорте, непосредственно не распознаваемая,pip
посколькуscikit-learn
полный пакет неsklearn
В python3 со скобками вокруг печати
источник
__version__
атрибут.print
, как и(2)+(3)
оценки для5
. Если в скобках есть запятая, все может стать немного интереснее, хотяprint
все равно работает, вроде.module.__version__
это хорошая первая вещь, чтобы попробовать, но это не всегда работает.Если вы не хотите раскошелиться, и вы используете pip 8 или 9, вы все равно можете использовать
pip.get_installed_distributions()
для получения версий из Python:обновление: решение здесь работает в пипсах 8 и 9, но в пипсе 10 функция была перемещена из
pip.get_installed_distributions
вpip._internal.utils.misc.get_installed_distributions
в явное указание, что она не для внешнего использования. Не стоит полагаться на это, если вы используете pip 10+.источник
pip
, это всегда должно работать.Предыдущие ответы не решили мою проблему, но этот код сделал:
источник
__version__
если он не определен. Если нет__version__
, вы не получите результат для пакета, который вы хотите.__version__
атрибута, который является стандартным ( python.org/dev/peps/pep-0396/#specification ), невозможно узнать, где и как версия включена без ручного исследования.Вы можете использовать
importlib_metadata
библиотеку для этого.Если вы используете Python
<3.8
, сначала установите его с помощью:Начиная с python
3.8
он включен в стандартную библиотеку.Затем, чтобы проверить версию пакета (в этом примере
lxml
), запустите:Имейте в виду, что это работает только для пакетов, установленных из PyPI. Кроме того, вы должны передать имя пакета в качестве аргумента
version
методу, а не имя модуля, которое предоставляет этот пакет (хотя обычно они совпадают).источник
Используйте,
dir()
чтобы узнать, имеет ли модуль__version__
атрибут вообще.источник
Если вышеперечисленные методы не работают, стоит попробовать в python следующее:
См. Получить версию Python Tornado?
Обратите внимание, что
.version
у меня сработало и на некоторых других, кроме торнадо.источник
сначала добавьте python, pip в переменные окружения. так что вы можете выполнять свои команды из командной строки. затем просто дайте команду Python . затем импортируйте пакет
->
import scrapy
затем напечатайте название версии
->
print(scrapy.__version__)
Это определенно будет работать
источник
__version__
атрибут.pip freeze
<пакет> .__ версия_ работала. Спасибо за публикацию.Предполагая, что мы используем Jupyter Notebook (если вы используете терминал, отбросьте восклицательные знаки):
1) если пакет (например, xgboost) был установлен с помощью pip :
2) если пакет (например, caffe) был установлен с помощью conda :
источник
Некоторые модули не имеют
__version__
атрибутов, поэтому проще всего проверить в терминале:pip list
источник
В версии Python 3.8
metadata
вimportlib
пакете появился новый модуль , который также может это делать.Вот пример из документации:
источник
Я предлагаю открыть
python
оболочку в терминале (в интересующей вас версии python), импортировать библиотеку и получить ее__version__
атрибут.Примечание 1: мы должны рассмотреть версию Python . Если мы установили разные версии python, мы должны открыть терминал в интересующей нас версии python. Например, открытие терминала с помощью
python3.8
can (несомненно, даст) даст другую версию библиотеки, чем открытие с помощьюpython3.5
илиpython2.7
.Примечание 2: мы избегаем использования
print
функции , потому что ее поведение зависит от python2 или python3. Нам это не нужно, терминал покажет значение выражения.источник
Это работает и в Jupyter Notebook на Windows! Пока Jupyter запускается из командной строки, совместимой с bash, такой как Git Bash (MingW64), решения, приведенные во многих ответах, могут использоваться в Jupyter Notebook в системах Windows с одним небольшим изменением.
Я использую Windows 10 Pro с Python, установленным через Anaconda, и следующий код работает, когда я запускаю Jupyter через Git Bash (но не при запуске из приглашения Anaconda).
Подстройка: добавьте восклицательный знак (
!
) перед,pip
чтобы сделать это!pip
.источник
Быстрая программа питон , чтобы перечислить все packges (вы можете скопировать его в requirements.txt )
Вывод будет выглядеть так:
источник
(см. также https://stackoverflow.com/a/56912280/7262247 )
Я нашел довольно ненадежным использование различных доступных инструментов (включая лучший,
pkg_resources
упомянутый в ответе Якуба Кукула ), поскольку большинство из них не охватывает все случаи . НапримерТак как нам нужен был надежный способ получить версию любого пакета, модуля или субмодуля, я закончил писать getversion . Это довольно просто использовать:
Смотрите документацию для деталей.
источник
Чтобы получить список нестандартных (pip) модулей, импортированных в текущий модуль:
Результат:
Замечания:
Этот код был составлен из решений как на этой странице, так и из Как вывести список импортированных модулей?
источник
В итоге:
(Он предоставит все библиотеки вместе с информацией о версии).
А также:
(Это дает полную информацию о библиотеке).
источник
Вы можете попробовать это:
Это выведет все пакеты с их версиями. Вывод
источник
Опираясь на ответ Якуба Кукула, я нашел более надежный способ решения этой проблемы.
Основная проблема этого подхода заключается в том, что пакеты должны быть установлены «условно» (и это не включает использование
pip install --user
) или находиться в системном PATH при инициализации Python.Чтобы обойти это вы можете использовать
pkg_resources.find_distributions(path_to_search)
. Это в основном ищет распределения, которые были бы импортируемыми, если быpath_to_search
были в системном PATH.Мы можем перебрать этот генератор так:
Это вернет словарь с модулями в качестве ключей и их версией в качестве значения. Этот подход может быть расширен гораздо больше, чем номер версии.
Спасибо Якубу Кукулу за указание в правильном направлении
источник
Написание этого ответа для пользователей Windows. Как предлагается во всех других ответах, вы можете использовать эти утверждения как:
Но есть некоторые модули, которые не печатают свою версию даже после использования описанного выше метода. Итак, что вы можете просто сделать:
источник
вы можете сначала установить такой пакет, а затем проверить его версию
это должно дать вам версию пакета
источник