python - cmake 发现错误的 python 库

标签 python macos cmake

我是 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/

相关文章:

python - 如何将自己的文件扩展名绑定(bind)到python脚本并抑制控制台

python - Psycopg2 - 返回前 1000 个结果并随机选择一个

python - 导入错误 : cannot import name HTTPSHandler using Brew

CMake:将 Fortran 链接到静态 C 库失败

android - linux 上的 CMake 错误(Android Studio 中的 Flutter 项目)

cmake - 在 CMake 中使用来自 C/C++ 宏的值

python - 如何将DataFrame的行数限制为特定列中的第X个唯一值?

python - 在 Windows 下使用 matplotlib 保存 python 绘图失败

linux - ;& 和 ;; 之间的区别在 bash 脚本中

javascript - 如何使用 Mac OS 和 Firefox 触发 cmd+h?