CMakeはPythonLibを見つけることができません


13

VirtualBoxシミュレーターで実行されているubuntuでinria Graphiteを構築しようとしています。指示に従ってpython-devパッケージをインストールしますが、cmakeを実行してもエラーが発生します:

CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108          (message):
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
(Required is at least version "3.2")
Call Stack (most recent call first):
 /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:315     (_FPHSA_FAILURE_MESSAGE)
 /usr/share/cmake-2.8/Modules/FindPythonLibs.cmake:208 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
 src/packages/OGF/gel_python3/CMakeLists.txt:11 (FIND_PACKAGE)

私はチェックし/usr/lib/て見つけます

tintin@tintin-VirtualBox:/usr/lib$ find . -name "libpython*"
./x86_64-linux-gnu/libpython3.4m.so.1.0
./x86_64-linux-gnu/libpython2.7.so.1.0
./x86_64-linux-gnu/libpython3.4m.a
./x86_64-linux-gnu/libpython2.7.a
./x86_64-linux-gnu/libpython3.4m.so
./x86_64-linux-gnu/libpython2.7.so
./x86_64-linux-gnu/libpython2.7.so.1
./x86_64-linux-gnu/libpython3.4m.so.1

では、なぜcmakeがPythonLibを見つけられないのか、どうすればこれに対処すべきなのでしょうか?

回答:


21

python-dev実際にインストールするとこれが修正されました:

sudo apt-get install python-dev

ここでヒントを得ました:https : //github.com/Valloric/YouCompleteMe/issues/484


2
外部リンクを指すのではなく、そこから関連部分をコピーして貼り付けて、何らかの理由でリンクに到達できない場合でもコンテンツがここで利用できるようにしてください。
heemayl

1
解決策はsudo apt-get install python-dev
次のとおりです。– helgar

@helgar 回答を編集して、上記のコマンドを追加してください。
ロン

3
小さなメモ:Python 3の場合はを使用しますapt-get install python3-devpython-devpython3-devは、選択したPythonの最新の開発者を上流に引き上げるメタパッケージです。
rbaleksandar

これですべてのケースで問題が解決するわけではありません。@ Jobの回答がその理由を説明しています。
ミネラル

10

問題は、Ubuntu 14.04がデフォルトでPython 3.4をインストールし、Ubuntu(2.8)のCMakeバージョンがPython 3.3までしか検索しないことです。回避策はset(Python_ADDITIONAL_VERSIONS 3.4)find_packageステートメントの前に追加することです。この問題に関するバグを報告したことに注意してください。

CMake 3.0以降、CMakeはPython 3.4まで検索するため、そのバージョンを手動でインストールすることでも問題が解決するはずです。


downvoteについての説明をするといいでしょう。
仕事14

2

私にとってこの問題は悪いキャッシュでした

rm CMakeCache.txt

古い2.7バージョンでキャッシュを削除し、私の場合は3.2を見つけることができました。

私が使用したcmakeは

find_package(PythonInterp 3.2 REQUIRED)
find_package(PythonLibs 3.2 REQUIRED)
message(STATUS "PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}")
message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}")
message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}")
...
include_directories(${PYTHON_INCLUDE_DIRS})

1

最近、Ubuntu 14.04 64ビットでも同様の問題が発生しました。明らかに、CMakeはデフォルトでアーキテクチャ依存のインストールフォルダを調べません:

CMake constructs a set of possible installation prefixes for the package. Under
each prefix several directories are searched for a configuration file. The tables
below show the directories searched.

[...]

  <prefix>/(lib/<arch>|lib|share)/cmake/<name>*/          (U)
  <prefix>/(lib/<arch>|lib|share)/<name>*/                (U)
  <prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/  (U)

[...]

In all cases the <name> is treated as case-insensitive and corresponds to any of
the names specified (<package> or names given by NAMES). Paths with lib/<arch>
are enabled if CMAKE_LIBRARY_ARCHITECTURE is set.

find_packageコマンドの CMake 2.8.12オンラインドキュメントから)

ソリューションは、PythonLibsのfind_packageを呼び出す前に、プロジェクトルートCMakeLists.txtファイル(src / packages / OGF / gel_python3 / CMakeLists.txtを編集する場合)でこのCMAKE_LIBRARY_ARCHITECTUREを設定することで構成されます。例えば:

cmake_minimum_required(VERSION 2.8)
project(project_name)

# Check the architecture and set CMAKE_LIBRARY_ARCHITECTURE accordingly
if(UNIX)
  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
  endif()
endif()

find_package(PythonInterp 3.2 REQUIRED)
find_package(PythonLibs 3.2 REQUIRED)

# Rest of your file

私の場合はうまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.