如何检查python模块的版本?

tar*_*yte 585 python

我刚安装的Python模块:constructstatlibsetuptools这样的:

# 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
Run Code Online (Sandbox Code Playgroud)

我希望能够(以编程方式)检查他们的版本.是否python --version可以从命令行运行?

我的python版本是2.7.3.

alk*_*lko 624

我建议使用pip代替easy_install.使用pip,您可以列出所有已安装的软件包及其版本

pip freeze
Run Code Online (Sandbox Code Playgroud)

在大多数Linux系统中,您可以通过管道grep来查找您感兴趣的特定包的行:

Linux:
$ pip freeze | grep lxml
lxml==2.3

Windows:
c:\> pip freeze | findstr lxml
lxml==2.3
Run Code Online (Sandbox Code Playgroud)

对于单个模块,您可以尝试该findstr属性,但是有没有它的模块:

$ 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__'
Run Code Online (Sandbox Code Playgroud)

最后,当您的问题中的命令带有前缀时__version__,您似乎正在安装到全局python环境中.强烈建议您查看python 虚拟环境管理器,例如virtualenvwrapper

  • 以下答案提示`pip show lxml | grep Version`; 这将运行得更快,因为它只检查单个包. (15认同)
  • 只是为了完整性:第三个版本是`pip list | grep lxml` (9认同)
  • @RavenCheuk使用`pip list | findstr lxml` (4认同)
  • 在Windows系统上怎么样?什么是Windows中的`grep`?由于pip冻结| grep lxml不适用于windwos. (3认同)
  • 带find的Windows变体(短1个字符...):点列表| 找到“ lxml” (2认同)

dam*_*ois 325

你可以试试

>>> import statlib
>>> print statlib.__version__

>>> import construct
>>> print contruct.__version__
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,某些公共库的某些版本(例如`inspect`)并没有`__version__`属性. (44认同)
  • 很多模块都没有__version__ (6认同)
  • PySerial有`serial.VERSION`.也许还有一些其他常用的模块,它们不遵循PEP 0396:https://www.python.org/dev/peps/pep-0396/ (5认同)
  • 如果使用Python 3,则使用print(contruct .__ version __)。* (2认同)

Jak*_*kul 176

使用pkg_resourcessetuptools库分发的模块.请注意,传递给get_distribution方法的字符串应与PyPI条目相对应.

>>> import pkg_resources
>>> pkg_resources.get_distribution("construct").version
'2.5.2'
Run Code Online (Sandbox Code Playgroud)

如果你想从命令行运行它,你可以这样做:

python -c "import pkg_resources; print(pkg_resources.get_distribution('construct').version)"
Run Code Online (Sandbox Code Playgroud)

请注意,传递给get_distribution方法的字符串应该是在PyPI中注册的包名,而不是您尝试导入的模块名.

不幸的是,这些并不总是相同的(例如,你这样做pip install memcached,但是import memcache).

  • 即使模块没有属性`__version__`,这也可以工作. (16认同)
  • 应该是最好的答案,这是获得软件包版本的唯一可靠方法(如果有的话) (6认同)
  • 请注意,`pkg_resources.get_distrinbution`并不总是有效.它发出一些`DistributionNotFound`异常,错误消息如下:"找不到'the_package_name'分布并且是应用程序所需的" (6认同)
  • @mjv 您的错误很可能是因为 1) 未安装软件包 2) 您将模块名称而不是软件包名称传递给 `get_distribution` 方法 (3认同)

0x3*_*bfc 89

我认为这可以帮助但是首先安装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
Run Code Online (Sandbox Code Playgroud)

  • @SamFinnigan`pip show`在*pip 1.2.1.post1*中实现.你正在使用一个非常过时的版本的pip,所以难怪你有麻烦!我目前正在运行*pip 7.1.2*.如果有什么东西阻止您更新,您可以随时在本地或在virtualenv中安装它. (3认同)
  • 这里没有快乐!`pip:错误:名称pip show没有命令(也许你的意思是"pip install show")` (2认同)

sus*_*097 64

更好的方法是:


有关具体包的详细信息

pip show <package_name>

它详细介绍了Package_name,Version,Author,Location等.


$ 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: numpy-discussion@python.org
License: BSD
Location: c:\users\prowinjvm\appdata\local\programs\python\python36\lib\site-packages
Requires:
Run Code Online (Sandbox Code Playgroud)

更多细节: >>> pip help


pip 应该更新以执行此操作.

pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)

在Windows上,推荐命令是:

python -m pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用“pip show scikit-learn”而不是“pip show sklearn”。sklearn 是导入期间使用的缩写形式,不能直接在 `pip` 中识别,因为 `scikit-learn` 是完整的学习包而不是 `sklearn` (2认同)

小智 37

在python3中用括号围绕打印

>>> import celery
>>> print(celery.__version__)
3.1.14
Run Code Online (Sandbox Code Playgroud)

  • 并非每个包都具有`__version__`属性. (28认同)
  • @user1976 这在 Python 2 中也是有效的语法。`print` 的参数周围可以使用括号,就像 `(2)+(3)` 的计算结果为 `5` 一样。当括号内有逗号时,事情可能会变得更有趣,尽管对于“print”来说,它仍然有效。 (2认同)

wat*_*oof 20

module.__version__ 尝试是一个很好的第一件事,但它并不总是有效.

如果你不想要shell,并且你正在使用pip 8或9,你仍然可以使用pip.get_installed_distributions()从Python中获取版本:

更新: 这里的解决方案适用于PIP 8和9,但在PIP 10的功能已经从移动pip.get_installed_distributionspip._internal.utils.misc.get_installed_distributions明确表示,这不是外用.如果你使用pip 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', ...]
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这个解决方案是不可行的。Pip 不保证任何进程内 API,只保证通过命令行的 API。这种方法不再适用于 pip 10。 (2认同)

tas*_*hka 16

以前的答案没有解决我的问题,但这段代码做了:

import sys 
for name, module in sorted(sys.modules.items()): 
  if hasattr(module, '__version__'): 
    print name, module.__version__ 
Run Code Online (Sandbox Code Playgroud)

  • 这只是避免了尝试打印未定义的__version__。如果没有`__version__`,那么您想要的软件包将不会收到任何结果。 (2认同)

jtu*_*uri 10

使用dir()以找出是否该模块具有__version__的所有属性。

>>> 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']
Run Code Online (Sandbox Code Playgroud)


Jak*_*kul 8

您可以importlib_metadata为此使用库。

如果您使用的是python <3.8,请首先使用以下命令进行安装:

pip install importlib_metadata
Run Code Online (Sandbox Code Playgroud)

从python开始,3.8它已包含在标准库中。

然后,要检查软件包的版本(在本示例中为lxml),请运行:

>>> from importlib_metadata import version
>>> version('lxml')
'4.3.1'
Run Code Online (Sandbox Code Playgroud)

请记住,这仅适用于从PyPI安装的软件包。另外,您必须将包名称作为version方法的参数传递,而不是此包提供的模块名称(尽管它们通常是相同的)。


Dav*_*yan 8

在 Python 3.8 版本metadata中,importlib包中有一个新模块,它也可以做到这一点。

这是文档中的一个示例:

>>> from importlib.metadata import version
>>> version('requests')
'2.22.0'
Run Code Online (Sandbox Code Playgroud)


lou*_*der 7

这个答案是针对 Windows 用户的。正如所有其他答案中所建议的,您可以将这些语句用作:

\n
import [type the module name]\nprint(module.__version__) # module + \'.\' + double underscore + version + double underscore\n
Run Code Online (Sandbox Code Playgroud)\n

但是,有些模块即使使用上述方法后也不会打印其版本。因此,您可以简单地执行以下操作:

\n
    \n
  1. 打开命令提示符。
  2. \n
  3. 使用cd文件地址)导航到安装了 Python 和所有支持模块的文件地址/目录。如果您的系统上只有一个 Python 解释器,则PyPI包通常在目录/文件夹中可见:Python \xe2\x86\x92 Lib \xe2\x86\x92 site-packages
  4. \n
  5. 使用命令“ pip install [模块名称] ”并点击Enter
  6. \n
  7. 这将向您显示一条消息“已满足要求:文件地址\\文件夹名称(带版本) ”。
  8. \n
  9. 例如,请参见下面的屏幕截图:我必须知道名为“Selenium-Screenshot”的预安装模块的版本。它正确显示为 1.5.0:
  10. \n
\n

命令提示符截图

\n


Moh*_*lah 7

转到终端,如 pycharm-terminal

现在写pyorpython 并按Enter

现在你在终端中的 python 中,你可以尝试这样:

# import <name_of_the_library>

import kivy

# So if the library has __version__ magic method, so this way will help you

kivy.__version__  # then hit Enter to see the version

# Output >> '2.1.0'
Run Code Online (Sandbox Code Playgroud)

但如果上述方法不适合您可以尝试这种方法来了解信息,包括库的版本

 pip show module <HERE PUT THE NAME OF THE LIBRARY>
Run Code Online (Sandbox Code Playgroud)

例子:

pip show module pyperclip

Output:
       Name: pyperclip
       Version: 1.8.2
       Summary: A cross-platform clipboard module for Python. (Only handles plain text for now.)
       Home-page: https://github.com/asweigart/pyperclip
       Author: Al Sweigart
       Author-email: al@inventwithpython.com
       License: BSD
       Location: c:\c\kivymd\virt\lib\site-packages
       Requires:
       Required-by:
Run Code Online (Sandbox Code Playgroud)

还有另一种方法可以帮助您显示项目中的所有库及其版本:

pip freeze
# I used the above command in a terminal inside my project this is the output
       certifi==2021.10.8
       charset-normalizer==2.0.12
       docutils==0.18.1
       idna==3.3
       Kivy==2.1.0
       kivy-deps.angle==0.3.2
       kivy-deps.glew==0.3.1
       kivy-deps.sdl2==0.4.5
       Kivy-Garden==0.1.5
       kivymd @ file:///C:/c/kivymd/KivyMD
       Pillow==9.1.0
       Pygments==2.12.0
       pyperclip==1.8.2
       pypiwin32==223
       pywin32==303
       requests==2.27.1
       urllib3==1.26.9
Run Code Online (Sandbox Code Playgroud)

确保您可以尝试使用以下命令来显示所有库及其版本

pip list
Run Code Online (Sandbox Code Playgroud)

希望能帮助到大家,问候


D A*_*ams 6

如果上述方法不起作用,则值得在python中尝试以下方法:

import modulename

modulename.version
modulename.version_info
Run Code Online (Sandbox Code Playgroud)

请参阅获取Python龙卷风版本?

请注意,.version除龙卷风之外,还为其他一些人工作过.


小智 6

首先添加python,pip到你的环境变量.这样您就可以从命令提示符执行命令.然后简单地给出python命令.然后导入包

- >import scrapy

然后打印版本名称

- >print(scrapy.__version__)

这肯定会奏效

  • 正如这里多次讨论的那样,并非每个模块都提供一个__version__属性。 (2认同)

小智 6

假设我们正在使用Jupyter Notebook(如果使用Terminal,请删除感叹号):

1)如果软件包(例如xgboost)是通过pip安装的:

!pip show xgboost
!pip freeze | grep xgboost
!pip list | grep xgboost
Run Code Online (Sandbox Code Playgroud)

2)如果软件包(例如caffe)与conda一起安装:

!conda list caffe
Run Code Online (Sandbox Code Playgroud)


Yuc*_*ang 5

有些模块没有__version__属性,所以最简单的方法是在终端中检查:pip list


lov*_*sus 5

我建议python在终端中打开一个shell(在你感兴趣的 python 版本中),导入库,并获取它的__version__属性。

>>> import statlib
>>> statlib.__version__

>>> import construct
>>> contruct.__version__
Run Code Online (Sandbox Code Playgroud)

注意1:我们必须考虑python版本。如果我们安装了不同版本的python,我们必须在我们感兴趣的python版本中打开终端。例如,用python3.8can(肯定会)打开终端与用python3.5或打开不同的库版本python2.7

注意 2:我们避免使用print函数,因为它的行为取决于 python2 或 python3。我们不需要它,终端会显示表达式的值。


小智 5

总之:

conda list
Run Code Online (Sandbox Code Playgroud)

(它将提供所有库以及版本详细信息。)

和:

pip show tensorflow
Run Code Online (Sandbox Code Playgroud)

(它提供了完整的库详细信息。)

  • 使用“conda list”,您可以命名所需的包,例如“conda list statlib”。 (2认同)

小智 5

你可以试试这个:

pip list
Run Code Online (Sandbox Code Playgroud)

这将输出所有包及其版本。 输出