このエラーの取得:
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".
私はすでにインストールしています:
環境変数は既に次のように設定されています。
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/
これを解決するには?
エラーを修正するには、cmake
コマンドに-DPYTHON_LIBRARY
および-DPYTHON_INCLUDE_DIR
フラグをそれぞれのフォルダーに追加して追加します。
したがって、トリックはpythonインタープリターから返された情報でこれらのパラメーターを入力することです。これは最も信頼性の高いものです。これはpython/version(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 symlinkがPython2.Xを指している場合、python3 -c ...
python -c ...
の代わりに使用できます。
エラーが続く場合は、cmake
を@pdpcostaで指定されているより高いバージョンに更新し、プロセスを再度繰り返す必要があります。
Xubuntu 14.04 Thrusty TahrシステムでOpenCV 3をコンパイルしようとしたときに、この問題に直面していました。 Pythonのすべてのdevパッケージがインストールされている場合、構成プロセスは常にメッセージを返していました。
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")
Thrusty Tahrリポジトリで利用可能なCMakeバージョンは2.8です。 CMakeをアップグレードするきっかけとなった投稿もあります。 CMakeバージョン3.2をインストールするPPA CMakeリポジトリを追加しました。
アップグレード後、すべてがスムーズに実行され、コンパイルが成功しました。
同じ問題にぶつかり、エラーメッセージが誤解を招く変数名を与えることを発見しました。以下を設定してみてください(複数ではなく単数):
PYTHON_INCLUDE_DIR=/usr/include/python2.7
PYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so
エラーメッセージが表示される(複数の)変数は、PythonLibsが正しく初期化されたときに設定される値です。
私にとっては次に役立ちました:
> apt-get install python-dev python3-dev
この問題は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\\"
Ubuntuの最後のバージョンは、デフォルトでPython 3.4をインストールします。UbuntuのCMakeバージョン(2.8)は、Python 3.3。
_find_package
_ステートメントの前にset(Python_ADDITIONAL_VERSIONS 3.4)
を追加してみてください。
_CMakeCache.txt
_もきれいにすることを忘れないでください。
上記のように-DPYTHON_INCLUDE_DIR
と-DPYTHON_LIBRARY
を追加した後でも、エラーCould NOT find PythonInterp
に直面していました。解決したのは、 https://github.com/pybind/pybind11/issues/99#issuecomment-182071479 で提案されているように、-DPYTHON_EXECUTABLE:FILEPATH=
をcmake
に追加することでした。
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`
CMakeバージョン3.12以降を使用している場合、変数PythonInterp
およびPythonLibs
はPython
に変更されていることに注意してください。
したがって、次を使用します。
find_package(Python ${PY_VERSION} REQUIRED)
の代わりに:
find_package(PythonInterp ${PY_VERSION} REQUIRED)
find_package(PythonLibs ${PY_VERSION} REQUIRED)
詳細については https://cmake.org/cmake/help/v3.12/module/FindPython.html を参照してください。
これを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)