Cmake无法找到Python库

81 投票
14 回答
192395 浏览
提问于 2025-04-18 09:30

出现了这个错误:

sudo: unable to resolve host coderw@ll
-- Could NOT find PythonLibs (missing:  PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS) 
CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108     
(message):
Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE)
Call Stack (most recent call first):
/usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:315  
(_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-2.8/Modules/FindPythonInterp.cmake:139 
(FIND_PACKAGE_HANDLE_STANDARD_ARGS)
Code/cmake/Modules/FindNumPy.cmake:10 (find_package)
CMakeLists.txt:114 (find_package)



-- Configuring incomplete, errors occurred!
See also "/home/coderwall/Desktop/rdkit/build/CMakeFiles/CMakeOutput.log".
See also "/home/coderwall/Desktop/rdkit/build/CMakeFiles/CMakeError.log".

我已经安装了:

  1. sudo apt-get install python-dev
  2. 环境变量已经设置如下:

    PYTHON_INCLUDE_DIRS=/usr/include/python2.7 
    PYTHON_LIBRARIES=/usr/lib/python2.7/config/libpython2.7.so
    

python.h 的位置是:/usr/lib/include/python2.7/python.h

python 库的位置是:/usr/lib/python2.7/

该怎么解决这个问题呢?

14 个回答

15

我在尝试在Xubuntu 14.04 Thrusty Tahr系统上编译OpenCV 3时遇到了这个问题。虽然我已经安装了所有Python的开发包,但配置过程中总是出现这样的提示:

Could NOT found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.6", minimum required is "2.7")
Could NOT find PythonLibs (missing: PYTHON_INCLUDE_DIRS) (found suitable exact version "2.7.6")
Found PythonInterp: /usr/bin/python3.4 (found suitable version "3.4", minimum required is "3.4")
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES) (Required is exact version "3.4.0")

Thrusty Tahr的仓库里提供的CMake版本是2.8。有些帖子让我想到要升级CMake。我添加了一个PPA CMake仓库,这样就安装了CMake 3.2版本。

升级之后,一切都顺利了,编译成功了。

19

即使我按照上面的建议添加了 -DPYTHON_INCLUDE_DIR-DPYTHON_LIBRARY,我仍然遇到了 Could NOT find PythonInterp 的错误。解决这个问题的方法是按照这个链接的建议,给 cmake 添加 -DPYTHON_EXECUTABLE:FILEPATH=

cmake .. \
-DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())")  \
-DPYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \
-DPYTHON_EXECUTABLE:FILEPATH=`which python`
21

我也遇到了同样的问题,发现错误信息中的变量名称让人误解。试着设置下面这个(用单数而不是复数):

PYTHON_INCLUDE_DIR=/usr/include/python2.7 
PYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so

你看到的那些(复数)变量的错误信息,其实是PythonLibs在正确初始化时设置的值。

47

对我来说,这个很有帮助:

# if using python2
apt-get install python-dev

# if using python3
apt-get install python3-dev
79

你可以通过在 cmake 命令后面加上 -DPYTHON_LIBRARY-DPYTHON_INCLUDE_DIR 这两个参数,并填上相应的文件夹路径,来解决错误。

简单来说,就是把这些参数填上从 Python 解释器那里得到的信息,这样是最可靠的。这种方法可能不受你 Python 的安装位置或版本的影响(对 Anaconda 用户也适用):

$ cmake .. \
-DPYTHON_INCLUDE_DIR=$(python -c "import sysconfig; print(sysconfig.get_path('include'))")  \
-DPYTHON_LIBRARY=$(python -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR'))")

如果你想要链接的 Python 版本是 Python3.X,而默认的 Python 符号链接指向的是 Python2.X,那么可以用 python3 -c ... 来代替 python -c ...

如果错误依然存在,你可能需要把 cmake 更新到更高的版本,正如 @pdpcosta 所说,然后再重复这个过程。

撰写回答