前一段时间,我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链接到哪个二进制文件?
答案 0 :(得分:2)
这很棘手。没有标准的方法,你必须依赖包提供的信息(许多人不做)和特定库的实现细节。
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
通常,编译标志不存储在任何地方。 Python在sys
module和sysconfig
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'
如果要检查它们是否是正确的版本,您可以进一步检查动态库链接到的内容;你如何做到这一点取决于平台:
ldd
,请参阅How to show all shared libraries used by executables in Linux? otool -L
,请参阅What is the clang analogue of ldd? dumpbin
工具,请参阅How to check for DLL dependency? 答案 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
它将列出您环境中安装的所有库及其版本号。