首页 > 解决方案 > 找不到 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() 的搜索中。有人知道怎么做吗?

标签: pythonc++boostcmakeanaconda

解决方案


推荐阅读