Cmake无法找到Python库
出现了这个错误:
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".
我已经安装了:
- sudo apt-get install python-dev
环境变量已经设置如下:
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 个回答
我在尝试在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版本。
升级之后,一切都顺利了,编译成功了。
即使我按照上面的建议添加了 -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`
我也遇到了同样的问题,发现错误信息中的变量名称让人误解。试着设置下面这个(用单数而不是复数):
PYTHON_INCLUDE_DIR=/usr/include/python2.7
PYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so
你看到的那些(复数)变量的错误信息,其实是PythonLibs在正确初始化时设置的值。
对我来说,这个很有帮助:
# if using python2
apt-get install python-dev
# if using python3
apt-get install python3-dev
你可以通过在 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 所说,然后再重复这个过程。