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.