Cmake не может найти библиотеки Python
Получение этой ошибки:
sudo: unable to resolve host [email protected]
-- 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".
Я уже установил:
Расположение python.h
: /usr/lib/include/python2.7/python.h
Местоположение python
libs: /usr/lib/python2.7/
Как это решить?
Ответы
Ответ 1
Я столкнулся с этой проблемой при попытке скомпилировать OpenCV 3 в системе Xubuntu 14.04 Thrusty Tahr.
Когда все пакеты разработчика 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")
Версия CMake, доступная в репозиториях Thrusty Tahr, составляет 2,8.
Некоторые сообщения вдохновили меня на обновление CMake.
Я добавил репозиторий PPA CMake, который устанавливает версию CMake версии 3.2.
После обновления все прошло гладко и компиляция прошла успешно.
Ответ 2
Вы можете исправить ошибки, добавив к команде 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'))")
Если версия python, которую вы хотите связать с cmake, представляет собой Python3.X, а символьная ссылка на python по умолчанию на Python2.X, python3 -c ...
может использоваться вместо python -c ...
.
Если ошибка повторяется, вам может потребоваться обновить cmake
до более высокой версии, как указано в @pdpcosta, и повторить этот процесс еще раз.
Ответ 3
Я попал в ту же проблему, и обнаружил, что сообщение об ошибке дает неверные имена переменных. Попробуйте установить следующее (единственное вместо множественного числа):
PYTHON_INCLUDE_DIR=/usr/include/python2.7
PYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so
Переменные (множественное число), которые вы видите сообщения об ошибках, являются значениями, которые PythonLibs устанавливает, когда он инициализирован правильно.
Ответ 4
Некоторая последняя версия Ubuntu устанавливает Python 3.4 по умолчанию, а версия CMake из Ubuntu (2.8) выполняет поиск только до Python 3.3.
Попробуйте добавить set(Python_ADDITIONAL_VERSIONS 3.4)
перед оператором find_package
.
Не забудьте также очистить CMakeCache.txt
.
Ответ 5
Эта проблема также может возникать в 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\\"
Ответ 6
Для меня было полезно следующее:
> apt-get install python-dev python3-dev
Ответ 7
Даже после добавления -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`