Cmake无法找到Python库

Ami*_*Pal 34 python cmake python-2.7

得到此错误:

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".
Run Code Online (Sandbox Code Playgroud)

我已经安装了:

  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
    
    Run Code Online (Sandbox Code Playgroud)

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

pythonlibs的位置:/usr/lib/python2.7/ 如何解决这个问题?

Iva*_*eno 29

您可以通过附加cmake命令-DPYTHON_LIBRARY-DPYTHON_INCLUDE_DIR相应文件夹填充的标志来修复错误.

因此,诀窍是用python解释器返回的信息填充这些参数,这是最可靠的.这可能独立于您的python位置/版本(也适用于Anaconda用户):

$ 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'))")
Run Code Online (Sandbox Code Playgroud)

如果你要链接到cmake的python版本是Python3.X而默认的python符号链接指向Python2.X,python3 -c ...则可以代替使用python -c ....

如果错误仍然存​​在,您可能需要更新cmake@pdpcosta所述的更高版本并再次重复该过程.

  • @ Mr.WorshipMe是的,我更改了命令以提供.so的路径,如下所示:`-DPYTHON_LIBRARY = $(python -c"import distutils.sysconfig as sysconfig; import os; print(os.path.join(sysconfig) .get_config_var('LIBDIR'),sysconfig.get_config_var('LDLIBRARY')))")` (2认同)

小智 14

我遇到了同样的问题,发现错误信息给出了误导性的变量名称.尝试设置以下(单数而不是复数):

PYTHON_INCLUDE_DIR=/usr/include/python2.7 
PYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so
Run Code Online (Sandbox Code Playgroud)

您看到错误消息的(复数)变量是PythonLibs在正确初始化时设置的值.


小智 14

在尝试在Xubuntu 14.04 Thrusty Tahr系统上编译OpenCV 3时,我遇到了这个问题.安装了Python的所有dev包后,配置过程总是返回消息:

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")
Run Code Online (Sandbox Code Playgroud)

Thrusty Tahr存储库中提供的CMake版本为2.8.一些帖子激励我升级CMake.我添加了一个安装CMake版本3.2的PPA CMake存储库.

升级后,一切顺利进行,编译成功.


Lan*_*tig 14

即使添加-DPYTHON_INCLUDE_DIR-DPYTHON_LIBRARY按照上面的建议,我仍然面临错误Could NOT find PythonInterp。什么解决它被添加-DPYTHON_EXECUTABLE:FILEPATH=cmake作为建议https://github.com/pybind/pybind11/issues/99#issuecomment-182071479

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`
Run Code Online (Sandbox Code Playgroud)


Ole*_*sur 9

对我来说下一步很有帮助:

> apt-get install python-dev python3-dev
Run Code Online (Sandbox Code Playgroud)

  • 对我来说(在 Centos7 上)这一行解决了这个问题:`yum install python34-devel` (2认同)
  • 非常糟糕的答案。就像,如果不起作用,请尝试安装所有内容。您需要的是 python2 或 python3...(现在到了 2020 年,最好更新您的答案,因为 python2 已弃用) (2认同)

Pat*_*oni 7

最后一个版本的Ubuntu默认安装Python 3.4,而Ubuntu(2.8)的CMake版本只搜索Python 3.3.

尝试set(Python_ADDITIONAL_VERSIONS 3.4)find_package声明之前添加.

记得也要清洁CMakeCache.txt.


小智 7

Windows中也可能发生此问题.Cmake查看注册表,有时候没有设置python值.对于那些有类似问题的人:

http://ericsilva.org/2012/10/11/restoring-your-python-registry-in-windows/

只需创建一个.reg文件来设置必要的密钥并进行相应编辑以匹配您的设置.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Python]

[HKEY_CURRENT_USER\Software\Python\Pythoncore]

[HKEY_CURRENT_USER\Software\Python\Pythoncore\2.6]

[HKEY_CURRENT_USER\Software\Python\Pythoncore\2.6\InstallPath]
@="C:\\python26"

[HKEY_CURRENT_USER\Software\Python\Pythoncore\2.6\PythonPath]
@="C:\\python26;C:\\python26\\Lib\\;C:\\python26\\DLLs\\"

[HKEY_CURRENT_USER\Software\Python\Pythoncore\2.7]

[HKEY_CURRENT_USER\Software\Python\Pythoncore\2.7\InstallPath]
@="C:\\python27"

[HKEY_CURRENT_USER\Software\Python\Pythoncore\2.7\PythonPath]
@="C:\\python27;C:\\python27\\Lib\\;C:\\python27\\DLLs\\"
Run Code Online (Sandbox Code Playgroud)