web-dev-qa-db-ja.com

CmakeはPythonライブラリを見つけることができません

このエラーの取得:

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

私はすでにインストールしています:

  1. Sudo apt-get install python-dev
  2. 環境変数は既に次のように設定されています。

    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/これを解決するには?

31
Amit Pal

エラーを修正するには、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で指定されているより高いバージョンに更新し、プロセスを再度繰り返す必要があります。

28

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リポジトリを追加しました。

アップグレード後、すべてがスムーズに実行され、コンパイルが成功しました。

14
pdpcosta

同じ問題にぶつかり、エラーメッセージが誤解を招く変数名を与えることを発見しました。以下を設定してみてください(複数ではなく単数):

PYTHON_INCLUDE_DIR=/usr/include/python2.7 
PYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so

エラーメッセージが表示される(複数の)変数は、PythonLibsが正しく初期化されたときに設定される値です。

14
Chris Lyon

私にとっては次に役立ちました:

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

この問題は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\\"
7
xenon

Ubuntuの最後のバージョンは、デフォルトでPython 3.4をインストールします。UbuntuのCMakeバージョン(2.8)は、Python 3.3。

_find_package_ステートメントの前にset(Python_ADDITIONAL_VERSIONS 3.4)を追加してみてください。

_CMakeCache.txt_もきれいにすることを忘れないでください。

7

上記のように-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`
3
Lane Rettig

CMakeバージョン3.12以降を使用している場合、変数PythonInterpおよびPythonLibsPythonに変更されていることに注意してください。

したがって、次を使用します。

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 を参照してください。

0
ZhaoGang

これを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)
0
Guo Ang