python - 找不到 PythonLibs、anaconda3
问题描述
原帖:
我正在尝试编译一个简单的“hello world”以从 python(anaconda3)调用,使用 CMake 编译。
我得到:
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
你好.cpp:
#include <boost/python.hpp>
#include <string>
std::string greet(std::string name){
return std::string("Hello, ") + name;
}
BOOST_PYTHON_MODULE(hello){
using namespace boost::python;
def("greet", greet, "Prepends a greeting to the passed name");
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
find_package(PythonLibs 3 REQUIRED)
set(BOOST_PYTHONLIB python-py36)
find_package(Boost COMPONENTS ${BOOST_PYTHONLIB})
python_add_module(hello hello.cpp)
target_include_directories(hello PUBLIC ${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
target_link_libraries(hello ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
至关重要的是,我正在尝试使用 anaconda3,因此基于其他一些帖子,我为调用 CMake 时添加了以下参数:
-DPYTHON_LIBRARY=/Users/chris/anaconda3/lib
-DPYTHON_INCLUDE_DIR=/Users/chris/anaconda3/include
但是无论有没有这些论点,我都会遇到同样的错误。我对此还比较陌生,所以如果这是微不足道的事情,我深表歉意。
我正在运行 Mojave 10.14.6,我正在通过 CLion 执行此操作。
更新:
正如这篇文章中所建议的,编辑包会发现
FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)
似乎有帮助 - 它找到 PythonLibs 但不是正确的。
Could NOT find PythonLibs: Found unsuitable version "2.7.10", but required is at least "3" (found /usr/lib/libpython2.7.dylib)
我知道我可以(原则上)做:
set(PYTHON_LIBRARIES /Users/chris/anaconda3/lib/libpython3.6m.dylib)
正如评论中所讨论的那样,它确实找到了正确的库,但正如上面的帖子中所讨论的那样,后来给了我错误Unknown CMake command "PYTHON_ADD_MODULE".
根据那篇文章,“原因似乎是因为这个函数是由 FindPythonLibs.cmake 提供的,它是由 find_package(Pythonlibs) 加载的,因此,如果这不用于定位 PythonLibs,则不能调用这个函数”。
因此,似乎/Users/chris/anaconda3/lib/libpython3.6m.dylib
需要以某种方式将路径添加到 FindPackage() 的搜索中。有人知道怎么做吗?
解决方案
推荐阅读
- java - Cordova 运行 android 错误:线程“主”java.lang.NullPointerException 中的异常
- javascript - 如何将 environment.json 文件复制到我的输出文件夹并在 Webpack 4 中使用输出文件?
- excel-formula - 基于涵盖不同定价期的日期的累积价格
- java - 从 SaxonHE 9.6 迁移到 SaxonHE 9.7
- jquery - Select2 附加和删除选项组和选项
- r - 从 R 中的注释 (#) 中提取值
- javascript - 如何从 react-hook-form + Redux 调度
- python - 代码优化:比 if else 循环更好的方法
- python - 从 GMM 模型中绘制高斯子群体
- clingo - 使用 clgo 输出作为 clgo 输入