1

前段时间,我为 Python 安装了 dynet,它运行良好。我用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 链接到哪个二进制文件?

4

3 回答 3

3

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

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

编译标志通常不会存储在任何地方sysPython 在modulesysconfigmodule的结构中公开了它自己的编译时信息,但是对于扩展模块没有这样的工具。除非扩展模块在 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'

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

于 2018-01-03T09:42:00.230 回答
1

来自此来源的 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"

于 2018-01-03T09:09:22.633 回答
0

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

pip freeze 

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

于 2018-01-03T09:07:45.693 回答