如何检查python链接到哪个二进制库文件?

2024-06-01 00:44:03 发布

您现在位置:Python中文网/ 问答频道 /正文

不久前,我做得很好。我用pip install git+https://github.com/clab/dynet#egg=dynet自动安装了它。在

然后,我想添加MKL支持。所以我再次手动安装了dynet,使用这里的说明:http://dynet.readthedocs.io/en/latest/python.html#manual-installation,将一个-DMKL参数传递给cmake。在

我想确保我做的每件事都是正确的,而且Python确实接受了dynet的新安装。我怎么检查这个?在

一般来说,当我有C++构建并从Python链接的库时,如何从Python中检查已安装的库的细节,特别是Python链接到什么二进制文件?在


Tags: installpiphttpsiogitgithubcomhttp
3条回答

这很棘手。没有标准的方法,您必须依赖包提供的信息(许多人不这样做)和特定库的实现细节。在

Python库经常在一个__version__属性中公开它们的版本号。这个属性不是标准化的,它最多是一种约定。dynet库确实具有此属性,但它没有列出修补程序级别的版本,只列出主要版本和次要版本:

>>> import dynet
>>> dynet.__version__
'2.0'

因为您可以直接从版本控制系统(使用git+https://...)安装库,也可以从源代码手动安装库,因此您不能使用pip freeze或{}来检查版本:

^{pr2}$

编译标志通常不存储在任何地方。Python在^{} module和{a2}的结构中公开它自己的编译时间信息,但是对于扩展模块没有这样的功能。除非扩展模块在API中显式地包含这样的信息,否则您在那里就走运了。在

最多,您可以尝试定位实际加载的动态模块。很多Python项目都间接地使用了一个模块来加载复杂的模块。在本例中,导入dynet将得到dynet.py文件:

>>> dynet.__file__
'/.../lib/python3.6/site-packages/dynet.py'

此文件是从项目源代码中的^{} file生成的。它将动态模块导入为_dynet

from _dynet import *

因此,您至少仍然可以找到加载了以下内容的动态对象的位置

>>> import _dynet
>>> _dynet.__file__
'/.../lib/python3.6/site-packages/_dynet.cpython-36m-darwin.so'

如果要检查动态库的版本是否正确,可以进一步检查该动态库链接到的内容;执行此操作的方式取决于平台:

来自this source的3种方式:

>>> import django
>>> django.__version__
'1.8'
>>> 
>>> import flask
>>> flask.__version__
'0.11.1'
>>> 
>>> import urllib2
>>> urllib2.__version__
'2.7'
>>> 
>>> import json
>>> json.__version__
'2.0.9'

或者使用pkg_resources

^{pr2}$

或者使用pip freeze

pip freeze | find /I "virtualenv"

你的问题不太清楚。 但是您可以通过运行下面的命令查看所有已安装的库。在

pip freeze 

所有的库都将随附在环境中的版本号一起安装。在

相关问题 更多 >