CMake nie może znaleźć PythonLibs


14

Próbuję zbudować grafikę inria na moim Ubuntu, który działa w symulatorze VirtualBox, postępuję zgodnie z instrukcjami i instaluję python-devpakiety, ale po uruchomieniu cmake nadal pojawia się błąd:

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)

Sprawdziłem /usr/lib/i znajdź

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

więc dlaczego cmake nie może znaleźć PythonLibs lub jak mam sobie z tym poradzić?

Odpowiedzi:


21

Instalowanie python-devnaprawiło to dla mnie:

sudo apt-get install python-dev

Mam podpowiedź tutaj: https://github.com/Valloric/YouCompleteMe/issues/484


2
Zamiast wskazywać na zewnętrzny link, skopiuj i wklej odpowiednią część stamtąd, aby jeśli link był nieosiągalny z jakiegoś powodu, zawartość jest nadal dostępna tutaj
heemayl

1
Rozwiązaniem jest uruchomienie:sudo apt-get install python-dev
helgar

@helgar Edytuj swoją odpowiedź i dodaj powyższe polecenie.
Ron

3
Mała uwaga: do użytku w Pythonie 3 apt-get install python3-dev. python-devi python3-devsą metapakietami, które ściągają najbardziej aktualne dev dla wybranego Pythona.
rbaleksandar

To nie rozwiązuje problemu we wszystkich przypadkach, odpowiedź udzielona przez @Job wyjaśnia dlaczego.
minerały

10

Problem polega na tym, że Ubuntu 14.04 domyślnie instaluje Python 3.4, a wersja CMake z Ubuntu (2.8) wyszukuje tylko Python 3.3. Obejściem tego problemu jest dodanie set(Python_ADDITIONAL_VERSIONS 3.4)przed find_packageinstrukcją. Pamiętaj, że zgłosiłem błąd dotyczący tego problemu.

Od CMake 3.0 CMake wyszukuje do Pythona 3.4 , więc ręczne zainstalowanie tej wersji powinno również rozwiązać problem.


Byłoby miło wyjaśnić tę opinię.
Job

3

Dla mnie problemem był zły bufor

rm CMakeCache.txt

Usunąłem pamięć podręczną ze starą wersją 2.7 i pozwoliłem jej znaleźć 3.2 w moim przypadku.

Użyłem 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

Ostatnio miałem podobny problem z Ubuntu 14.04 64-bit; najwyraźniej CMake domyślnie nie sprawdza folderów instalacyjnych zależnych od architektury:

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.

(z dokumentacji online CMake 2.8.12 komendy find_package )

Rozwiązanie polega na ustawieniu tego pliku CMAKE_LIBRARY_ARCHITECTURE w głównym pliku CMakeLists.txt projektu (w twoim przypadku będzie to edycja src / packages / OGF / gel_python3 / CMakeLists.txt) przed wywołaniem find_package dla PythonLibs; na przykład:

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

To zadziałało w moim przypadku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.