这很棘手。没有标准方法,您必须依赖包提供的信息(许多人不这样做)以及特定库的实现细节。
Python 库通常__version__
在属性中公开它们的版本号。这个属性不是标准化的,最多是一个约定。该dynet
库确实具有此属性,但它没有列出补丁级别的版本,仅列出主要和次要版本:
>>> import dynet
>>> dynet.__version__
'2.0'
因为您直接从版本控制系统(使用git+https://...
)或从源代码手动安装了该库,所以您不能使用pip freeze
或pkg_resources.get_distribution()
检查版本:
$ pip freeze | grep -i dynet
dyNET==0.0.0
编译标志通常不会存储在任何地方。sys
Python 在module和sysconfig
module的结构中公开了它自己的编译时信息,但是对于扩展模块没有这样的工具。除非扩展模块在 API 中明确包含此类信息,否则您将不走运。
充其量,您可以尝试定位实际加载的动态模块。许多项目使用包装 Python 模块,它间接加载实际的扩展模块,使事情变得混乱。在这种情况下,导入dynet
会为您提供dynet.py
文件:
>>> dynet.__file__
'/.../lib/python3.6/site-packages/dynet.py'
该文件是从项目源代码中的文件生成dynet.py.in
的。它将动态模块导入为_dynet
:
from _dynet import *
所以你至少仍然可以找到加载的动态对象的位置:
>>> import _dynet
>>> _dynet.__file__
'/.../lib/python3.6/site-packages/_dynet.cpython-36m-darwin.so'
如果您想检查它们是否是正确的版本,您可以进一步检查该动态库链接到的内容;你如何做到这一点取决于平台: