我是 CMake 新手,无法理解一些使用概念。
我正在从一个 c++ 程序调用一个 python 脚本:
#include <Python.h>
...
Py_Initialize();
PyRun_SimpleFile(...);
Py_Finalize();
我的 cmake 文件中对应的 cmake 条目是:
FIND_PACKAGE(PythonLibs REQUIRED)
...
TARGET_LINK_LIBRARIES(MyApplication ${PYTHON_LIBRARIES})
只要我的 python 脚本不使用安装在站点包目录中的任何模块,这就会起作用,否则我会收到 ImportError。 This question展示了如何使用 CMake 找到 site-packages 目录的位置,但是我应该告诉 CMake 怎么处理它?</p>
编辑:问题已解决。结果发现 FIND_PACKAGE(PythonLibs) 找到了与我通常使用的不同的 python 安装(/usr/local/lib/libpython2.7.dylib 而不是/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2。 7.dylib - 我在mac上),这是我获得标准python模块的方式,但我自己没有安装。为了将 PYTHONPATH 恢复正常,我添加了
try:
import some_package
except ImportError:
if "my_python_path" in sys.path: raise
sys.path.append("my_python_path")
在我的 python 脚本的顶部。
最佳答案
您可以通过指定 Python 库的路径来告诉 cmake 在哪里找到这个 PythonLib,如下所示:
cmake -DPYTHON_LIBRARIES=/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib .
这会将 cmake 中的 ${PYTHON_LIBRARIES} 设置为正确的路径。
要找出可以提供给 cmake 的其他可能选项(除了 PYTHON_LIBRARIES)(使用 -DARG 选项),请尝试运行
ccmake .
然后按c
进行配置,按t
进入高级选项。
例如,您可能还想设置
-DPYTHON_LIBRARY='/softwarepath/Python/Python2.7/lib/libpython2.7.so'
-DPYTHON_INCLUDE='/softwarepath/Python/Python2.7/include'
关于python - cmake 发现错误的 python 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7660001/