CMake PythonLib'leri bulamıyor


15

Bir VirtualBox simülatöründe çalışan ubuntu üzerinde inria Graphite oluşturmaya çalışıyorum , talimatları takip ediyorum ve python-devpaketleri yüklüyorum , ancak cmake'yi çalıştırdığımda hala bir hata var:

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)

Kontrol ettim /usr/lib/ve buldum

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

neden cmake PythonLibs'i bulamıyor, ya da bununla nasıl başa çıkmalıyım?

Yanıtlar:


21

Yükleme python-devaslında benim için bunu düzeltti:

sudo apt-get install python-dev

İpucu burada: https://github.com/Valloric/YouCompleteMe/issues/484


2
Harici bir bağlantıya işaret etmek yerine, lütfen ilgili kısmı oradan kopyalayıp yapıştırın, böylece bağlantı herhangi bir nedenle erişilemezse, içerik hala burada mevcuttur ..
— heemayl

1
Peki, çözüm çalıştırmak için:sudo apt-get install python-dev
— helgar

@helgar Lütfen cevabınızı düzenleyin ve yukarıdaki komutu ekleyin.
— Ron

3
Küçük bir not: Python 3 kullanımı için apt-get install python3-dev. python-devve python3-devseçilen Python için en güncel geliştirmeyi yukarı doğru çeken meta paketlerdir.
— rbaleksandar

Bu, her durumda sorunu çözmez, @Job tarafından verilen cevap nedenini açıklar.
— mineraller

10

Sorun, Ubuntu 14.04'ün varsayılan olarak Python 3.4'ü yüklemesi ve Ubuntu'nun (2.8) CMake sürümünün yalnızca Python 3.3'e kadar arama yapması gibi görünüyor. Çözüm, ifadeden set(Python_ADDITIONAL_VERSIONS 3.4)önce eklemektir find_package. Bu sorunla ilgili bir hata yaptığımı unutmayın .

CMake 3.0'dan beri, CMake Python 3.4'e kadar arama yapar , bu nedenle bu sürümü manuel olarak yüklemek de sorunu çözmelidir.


Downvote hakkında bir açıklama yapmak güzel olurdu.
— İş

4

Benim için sorun kötü bir önbellekti

rm CMakeCache.txt

Eski 2.7 sürümü ile önbellek kaldırıldı ve benim durumumda 3.2 bulmasına izin verdi.

Kullandığım 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

Son zamanlarda Ubuntu 14.04 64-bit ile benzer bir sorun yaşadım; görünüşe göre, CMake varsayılan olarak mimariye bağlı kurulum klasörlerine bakmaz:

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.

(CMake 2.8.12'den find_package komutunun çevrimiçi dokümantasyonundan )

Çözüm, PythonLibs için find_package çağrılmadan önce bu CMAKE_LIBRARY_ARCHITECTURE değerini proje kök CMakeLists.txt dosyasında (sizin durumda src / Packages / OGF / gel_python3 / CMakeLists.txt dosyasını düzenleyecek şekilde) ayarlamaktan oluşur; Örneğin:

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

Benim durumumda işe yaradı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.