【发布时间】:2018-01-27 01:30:47
【问题描述】:
我使用 Python 虚拟环境。基本上,它工作得很好,但是我在编译一些 Python 绑定时遇到了问题,即使用 libIGL 和 pybind11。
CMake 具有以下与 Python 相关的变量:
PYTHON_EXECUTABLE /users/me/libs/pyvenv/bin/python
PYTHON_INCLUDE_DIR /usr/include/python2.7
PYTHON_LIBRARY /usr/lib64/libpython2.7.so
它似乎可以正确检测到之前激活的虚拟环境的可执行文件是python3.5,但是它发现包含和库的一些错误的2.7路径。
所以我想手动将这些路径设置为我的虚拟环境。我浏览了虚拟环境的目录结构,我想我在/users/me/libs/pyvenv/include/python3.5m 中找到了包含。但是我找不到libpython*,我的虚拟环境中根本没有*.so 文件。那么在这种情况下我应该使用哪个库?
【问题讨论】:
-
显然,您应该使用正确的库!我相信您要查找的库应该与上面相同,将
python2.7替换为python3.5。顺便说一句,有一个可重现的例子会很好。您能否进一步解释一下“CMake 具有以下与 Python 相关的变量”? (这些环境变量是在脚本中设置的吗……等等) -
@Adonis:据我了解,问题是关于使用find_package(PythonLibs) 检测 Python 库的现有项目(libIGL 和 pybind11)。所以这里不太可能需要代码。
-
Tsyvarev,是的,如果 CMake 能自动找到文件就好了。但这个问题可以理解得更基础,就像:“在虚拟环境中哪里可以找到“libpython”。”
-
我不是 python 虚拟环境方面的专家,但我猜 python 库不依赖环境。环境将站点包确定为 python 脚本或库,但基本 python 库保持不变。所以,可能你需要在系统位置搜索库文件,比如
/usr/lib64/。 -
@Tsyvarev:虽然您提出的方法解决了问题,但我仍然觉得它非常不令人满意。虚拟环境的目的是在不关心底层系统的情况下提供对 Python 安装的访问。因此,直接以系统特定的路径访问库有点违反这一原则。只是我的 2 美分 ;-)
标签: python cmake virtualenv pybind11