mar*_*old 17 python macos cmake
我是CMake的新手,无法理解一些使用概念.
我正在从c ++程序调用python脚本:
#include <Python.h>
...
Py_Initialize();
PyRun_SimpleFile(...);
Py_Finalize();
Run Code Online (Sandbox Code Playgroud)
我的cmake文件中相应的cmake条目是:
FIND_PACKAGE(PythonLibs REQUIRED)
...
TARGET_LINK_LIBRARIES(MyApplication ${PYTHON_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
只要我的python脚本没有使用安装在site-packages目录中的任何模块,这就可以工作,否则我会得到一个ImportError.这个问题展示了如何使用CMake查找site-packages目录的位置,但是我应该告诉CMake如何处理呢?
编辑:问题解决了.事实证明,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")
Run Code Online (Sandbox Code Playgroud)
在我的python脚本的顶部.
Joa*_*kim 14
解决找到错误版本的问题的最佳方法(例如3.0而不是2.7)是指定find_package的最小版本(这将选择任何版本> = 2.7):
FIND_PACKAGE(PythonLibs 2.7 REQUIRED)
Run Code Online (Sandbox Code Playgroud)
或者获得确切的版本:
FIND_PACKAGE(PythonLibs 2.7.5 EXACT REQUIRED)
Run Code Online (Sandbox Code Playgroud)
Jen*_*man 13
您可以通过指定python库的路径告诉cmake在哪里找到这个PythonLibs,如下所示:
cmake -DPYTHON_LIBRARIES=/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib .
Run Code Online (Sandbox Code Playgroud)
然后,这会将cmake中的$ {PYTHON_LIBRARIES}设置为正确的路径.
要找出哪些其他可能的选项(除了PYTHON_LIBRARIES)你可以给cmake(使用-DARG选项)尝试运行
ccmake .
Run Code Online (Sandbox Code Playgroud)
然后按c配置,以及t高级选项.
例如,您可能还想设置
-DPYTHON_LIBRARY='/softwarepath/Python/Python2.7/lib/libpython2.7.so'
-DPYTHON_INCLUDE='/softwarepath/Python/Python2.7/include'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19572 次 |
| 最近记录: |