it-swarm.com.de

Cmake kann keine Python-Bibliotheken finden

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:

  1. Sudo apt-get install python-dev
  2. 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? 

29
Amit Pal

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.

23

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.

15
Chris Lyon

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.

14
pdpcosta

Für mich war weiter hilfreich:

> apt-get install python-dev python3-dev
8
Oleksandr Mosur

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\\"
7
xenon

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.

7

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`
2
Lane Rettig

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 .

0
ZhaoGang

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)
0
BruceGuo