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

时间:2018-01-03 09:03:00

标签: python libraries dynet

前一段时间,我installed dynet for 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链接到哪个二进制文件?

3 个答案:

答案 0 :(得分:2)

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

Python库经常__version__属性中公开其版本号。此属性未标准化,它至多是一种约定。 dynet库确实具有此属性,但它不会列出补丁级别版本,只列出主要版本和次要版本:

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

由于您是直接从版本控制系统(使用git+https://...)或从源手动安装库,因此您无法使用pip freezepkg_resources.get_distribution()来检查版本之一:

$ pip freeze | grep -i dynet
dyNET==0.0.0

通常,编译标志不存储在任何地方。 Python在sys modulesysconfig module的结构中公开了它自己的编译时信息,但是扩展模块没有这样的工具。除非扩展模块在API中明确包含此类信息,否则您将无法运气。

充其量,您可以尝试找到加载的实际动态模块。许多项目使用包装器Python模块,它间接加载实际的扩展模块,令人困惑。在这种情况下,导入dynet会为您提供dynet.py文件:

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

此文件是从项目源代码中的dynet.py.in file生成的。它将动态模块导入为_dynet

from _dynet import *

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

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

如果要检查它们是否是正确的版本,您可以进一步检查动态库链接到的内容;你如何做到这一点取决于平台:

答案 1 :(得分:1)

来自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

>>> import pkg_resources
>>> pkg_resources.get_distribution('flask').version

或使用pip freeze

pip freeze | find /I "virtualenv"

答案 2 :(得分:0)

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

pip freeze 

它将列出您环境中安装的所有库及其版本号。