Obtenir cette erreur:
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".
J'ai déjà installé:
Les variables d'environnement sont déjà définies comme suit:
PYTHON_INCLUDE_DIRS=/usr/include/python2.7
PYTHON_LIBRARIES=/usr/lib/python2.7/config/libpython2.7.so
Emplacement de python.h
: /usr/lib/include/python2.7/python.h
Emplacement de python
libs: /usr/lib/python2.7/
Comment résoudre ce problème?
Vous pouvez corriger les erreurs en ajoutant à la commande cmake
les indicateurs -DPYTHON_LIBRARY
et -DPYTHON_INCLUDE_DIR
remplis avec les dossiers respectifs.
Ainsi, l’astuce consiste à renseigner ces paramètres avec les informations renvoyées par l’interpréteur python, qui sont les plus fiables. Cela peut fonctionner indépendamment de votre emplacement/version de Python (également pour les utilisateurs d'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'))")
Si la version de python que vous souhaitez lier à cmake est Python3.X et que le lien symbolique python par défaut pointe vers Python2.X, vous pouvez utiliser python3 -c ...
au lieu de python -c ...
.
Si l'erreur persiste, vous devrez peut-être mettre à jour cmake
vers une version supérieure, comme indiqué par @pdpcosta, et répéter le processus à nouveau.
J'ai rencontré le même problème et découvert que le message d'erreur donnait des noms de variables trompeurs. Essayez de définir les éléments suivants (singulier au lieu de pluriel):
PYTHON_INCLUDE_DIR=/usr/include/python2.7
PYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so
Les variables (au pluriel) que vous voyez sur les messages d'erreur sont des valeurs que PythonLibs définit lorsqu'il est correctement initialisé.
Je faisais face à ce problème en essayant de compiler OpenCV 3 sur un système Xubuntu 14.04 Thrusty Tahr . Avec tous les packages de développement de Python installés, le processus de configuration renvoyait toujours le message suivant:
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")
La version de CMake disponible sur les référentiels Thrusty Tahr est la version 2.8 . Certains articles m'ont inspiré la mise à niveau de CMake . J'ai ajouté un référentiel PPA CMake qui installe CMake version 3.2.
Après la mise à niveau, tout s'est bien déroulé et la compilation a réussi.
Pour moi était utile ensuite:
> apt-get install python-dev python3-dev
Ce problème peut également se produire sous Windows. Cmake examine le registre et parfois les valeurs python ne sont pas définies. Pour ceux qui ont un problème similaire:
http://ericsilva.org/2012/10/11/restoring-your-python-registry-in-windows/
Créez simplement un fichier .reg pour définir les clés nécessaires et modifiez-le en fonction de votre configuration.
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\\"
Une dernière version d'Ubuntu installe Python 3.4 par défaut et la version CMake d'Ubuntu (2.8) ne recherche que jusqu'à Python 3.3.
Essayez d'ajouter set(Python_ADDITIONAL_VERSIONS 3.4)
avant l'instruction find_package
.
N'oubliez pas de nettoyer CMakeCache.txt
aussi.
Même après avoir ajouté -DPYTHON_INCLUDE_DIR
et -DPYTHON_LIBRARY
comme suggéré ci-dessus, je faisais toujours face à l'erreur Could NOT find PythonInterp
. Ce qui a résolu le problème, c’était d’ajouter -DPYTHON_EXECUTABLE:FILEPATH=
à cmake
comme suggéré dans 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`
Collez ceci dans votre CMakeLists.txt:
# find python
execute_process(COMMAND python-config --prefix OUTPUT_VARIABLE PYTHON_SEARCH_PATH)
string(REGEX REPLACE "\n$" "" PYTHON_SEARCH_PATH "${PYTHON_SEARCH_PATH}")
file(GLOB_RECURSE PYTHON_DY_LIBS ${PYTHON_SEARCH_PATH}/lib/libpython*.dylib ${PYTHON_SEARCH_PATH}/lib/libpython*.so)
if (PYTHON_DY_LIBS)
list(GET PYTHON_DY_LIBS 0 PYTHON_LIBRARY)
message("-- Find shared libpython: ${PYTHON_LIBRARY}")
else()
message(WARNING "Cannot find shared libpython, try find_package")
endif()
find_package(PythonInterp)
find_package(PythonLibs ${PYTHON_VERSION_STRING} EXACT)