Подтвердить что ты не робот

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".

Я уже установил:

  • 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 libs: /usr/lib/python2.7/ Как это решить?

4b9b3361

Ответ 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`