Diesen Fehler erhalten:
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".
Ich habe bereits installiert:
Umgebungsvariable sind bereits wie folgt festgelegt:
PYTHON_INCLUDE_DIRS=/usr/include/python2.7
PYTHON_LIBRARIES=/usr/lib/python2.7/config/libpython2.7.so
Ort von python.h
: /usr/lib/include/python2.7/python.h
Speicherort von python
libs: /usr/lib/python2.7/
Wie lösen Sie das?
Sie können die Fehler beheben, indem Sie an den Befehl cmake
die Flags -DPYTHON_LIBRARY
und -DPYTHON_INCLUDE_DIR
mit den entsprechenden Ordnern anhängen.
Daher besteht der Trick darin, diese Parameter mit den vom Python-Interpreter zurückgegebenen Informationen zu füllen, die am zuverlässigsten sind. Dies kann unabhängig von Ihrem Python-Standort/Ihrer Version funktionieren (auch für Anaconda-Benutzer):
$ 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'))")
Wenn die Version von Python, die Sie mit cmake verknüpfen möchten, Python3.X ist und der standardmäßige Python-Symlink auf Python2.X verweist, kann python3 -c ...
anstelle von python -c ...
verwendet werden.
Falls der Fehler weiterhin besteht, müssen Sie möglicherweise die cmake
auf eine höhere Version aktualisieren, wie von @pdpcosta angegeben, und den Vorgang erneut wiederholen.
Ich habe das gleiche Problem gefunden und festgestellt, dass die Fehlermeldung irreführende Variablennamen enthält. Stellen Sie Folgendes ein (Singular statt Plural):
PYTHON_INCLUDE_DIR=/usr/include/python2.7
PYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so
Die (Plural) Variablen, zu denen Fehlermeldungen angezeigt werden, sind Werte, die von PythonLibs bei korrekter Initialisierung eingerichtet werden.
Bei dem Versuch, OpenCV 3 auf einem Xubuntu 14.04-Thrusty-Tahr-System zu kompilieren, stand ich vor diesem Problem. Wenn alle Python-Dev-Pakete installiert waren, gab der Konfigurationsprozess immer die Meldung zurück:
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")
Die CMake-Version, die für Thrusty Tahr-Repositorys verfügbar ist, ist 2.8 . Einige Beiträge haben mich zu einem Upgrade von CMake ..__ inspiriert. Ich habe ein PPA-CMake-Repository hinzugefügt, mit dem CMake-Version 3.2 installiert wird.
Nach dem Upgrade lief alles reibungslos und die Zusammenstellung war erfolgreich.
Für mich war weiter hilfreich:
> apt-get install python-dev python3-dev
Dieses Problem kann auch in Windows auftreten. Cmake untersucht die Registrierung und manchmal werden keine Python-Werte festgelegt. Für diejenigen mit ähnlichen Problemen:
http://ericsilva.org/2012/10/11/restoring-your-python-registry-in-windows/
Erstellen Sie einfach eine .reg-Datei, um die erforderlichen Schlüssel festzulegen, und bearbeiten Sie sie entsprechend Ihrem Setup.
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\\"
Einige letzte Ubuntu-Versionen installieren standardmäßig Python 3.4. Die CMake-Version von Ubuntu (2.8) sucht nur bis zu Python 3.3.
Versuchen Sie, set(Python_ADDITIONAL_VERSIONS 3.4)
vor der find_package
-Anweisung hinzuzufügen.
Denken Sie daran, auch CMakeCache.txt
zu reinigen.
Selbst nachdem ich -DPYTHON_INCLUDE_DIR
und -DPYTHON_LIBRARY
wie oben vorgeschlagen hinzugefügt hatte, wurde der Fehler Could NOT find PythonInterp
immer noch angezeigt. Was gelöst wurde, war das Hinzufügen von -DPYTHON_EXECUTABLE:FILEPATH=
zu cmake
, wie in https://github.com/pybind/pybind11/issues/99#issuecomment-182071479 vorgeschlagen :
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`
Beachten Sie, dass die Variablen PythonInterp
und PythonLibs
in Python
geändert wurden, wenn Sie cMake Version 3.12 oder höher verwenden.
Also benutzen wir:
find_package(Python ${PY_VERSION} REQUIRED)
anstatt von:
find_package(PythonInterp ${PY_VERSION} REQUIRED)
find_package(PythonLibs ${PY_VERSION} REQUIRED)
weitere Informationen finden Sie unter https://cmake.org/cmake/help/v3.12/module/FindPython.html .
Fügen Sie dies in Ihre CMakeLists.txt ein:
# 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)