CMake tidak dapat menemukan PythonLibs


13

Saya mencoba membangun inria Graphite di ubuntu saya yang berjalan di simulator VirtualBox, saya mengikuti instruksi, dan menginstal python-devpaket, tetapi ketika saya menjalankan cmake, masih mendapat kesalahan:

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)

Saya memeriksa /usr/lib/dan menemukan

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

jadi mengapa cmake tidak dapat menemukan PythonLibs, atau bagaimana saya harus menghadapinya?

Jawaban:


21

Instalasi python-devsebenarnya memperbaiki ini untuk saya:

sudo apt-get install python-dev

Dapatkan petunjuknya di sini: https://github.com/Valloric/YouCompleteMe/issues/484


2
Alih-alih menunjuk ke tautan eksternal, silakan salin-tempel bagian yang relevan dari sana sehingga jika tautan tersebut tidak dapat dijangkau karena alasan tertentu kontennya masih tersedia di sini ..
heemayl

1
Nah, solusinya adalah menjalankan:sudo apt-get install python-dev
helgar

@helgar Harap edit jawaban Anda dan tambahkan perintah di atas.
Ron

3
Catatan kecil: untuk penggunaan Python 3 apt-get install python3-dev. python-devdan python3-devmetapackages yang menarik dev hulu terbaru untuk Python yang dipilih.
rbaleksandar

Ini tidak menyelesaikan masalah dalam semua kasus, jawaban yang diberikan oleh @Job menjelaskan alasannya.
mineral

10

Masalahnya tampaknya bahwa Ubuntu 14.04 menginstal Python 3.4 secara default dan versi CMake dari Ubuntu (2.8) hanya mencari hingga Python 3.3. Solusinya adalah menambahkan set(Python_ADDITIONAL_VERSIONS 3.4)sebelum find_packagepernyataan. Perhatikan bahwa saya mengajukan bug tentang masalah ini.

Sejak CMake 3.0, CMake mencari hingga Python 3.4 , jadi menginstal versi itu secara manual juga harus memperbaiki masalah.


Akan menyenangkan untuk memberikan penjelasan tentang downvote.
Pekerjaan

2

Bagi saya masalahnya adalah cache yang buruk

rm CMakeCache.txt

Menghapus cache dengan versi 2.7 yang lama dan memungkinkannya menemukan 3,2 dalam kasus saya.

Cmake yang saya gunakan adalah

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

Baru-baru ini saya memiliki masalah serupa dengan Ubuntu 14.04 64-bit; tampaknya, CMake tidak melihat ke folder instal bergantung arsitektur secara default:

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.

(dari CMake 2.8.12 dokumentasi online perintah find_package )

Sebuah solusi terdiri dari pengaturan CMAKE_LIBRARY_ARCHITECTURE ini dalam file CMakeLists.txt root proyek (dalam kasus Anda yang akan mengedit src / paket / OGF / gel_python3 / CMakeLists.txt) sebelum memanggil find_package untuk PythonLibs; contohnya:

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

Itu berhasil dalam kasus saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.