CMake non riesce a trovare PythonLibs


13

Sto cercando di creare inria Graphite sul mio Ubuntu che è in esecuzione in un simulatore VirtualBox, seguo le istruzioni e installo i python-devpacchetti, ma quando eseguo cmake, ho ancora un errore:

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)

Ho controllato il /usr/lib/e trovare

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

allora perché cmake non riesce a trovare i PythonLibs, o come dovrei occuparmene?

Risposte:


21

L'installazione ha python-deveffettivamente risolto questo problema per me:

sudo apt-get install python-dev

Ho trovato il suggerimento qui: https://github.com/Valloric/YouCompleteMe/issues/484


2
Invece di indicare un collegamento esterno, copia e incolla la parte pertinente da lì in modo che se il collegamento non è raggiungibile per qualche motivo, i contenuti sono ancora disponibili qui ..
heemayl,

1
Bene, la soluzione è di eseguire:sudo apt-get install python-dev
helgar il

@helgar Modifica la tua risposta e aggiungi il comando sopra.
Ron,

3
Una piccola nota: per l'uso di Python 3 apt-get install python3-dev. python-deve python3-devsono metapacchetti che portano a monte lo sviluppatore più attuale per il Python selezionato.
rbaleksandar,

Questo non risolve il problema in tutti i casi, la risposta data da @Job spiega perché.
minerali

10

Il problema sembra essere che Ubuntu 14.04 installa Python 3.4 per impostazione predefinita e la versione CMake di Ubuntu (2.8) cerca solo fino a Python 3.3. Una soluzione alternativa è aggiungere set(Python_ADDITIONAL_VERSIONS 3.4)prima find_packagedell'istruzione. Nota che ho segnalato un bug su questo problema.

Da CMake 3.0, CMake cerca fino a Python 3.4 , quindi l'installazione manuale di quella versione dovrebbe anche risolvere il problema.


Sarebbe bello dare una spiegazione del downvote.
Giobbe

2

Per me il problema era una cattiva cache

rm CMakeCache.txt

Rimossa la cache con la vecchia versione 2.7 e ho permesso di trovare 3.2 nel mio caso.

La cmake che ho usato è

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

Di recente ho avuto un problema simile con Ubuntu 14.04 a 64 bit; apparentemente, CMake non esamina le cartelle di installazione dipendenti dall'architettura per impostazione predefinita:

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.

(dalla documentazione online di CMake 2.8.12 del comando find_package )

Una soluzione consiste nell'impostare questo CMAKE_LIBRARY_ARCHITECTURE nel file CMakeLists.txt della radice del progetto (nel tuo caso che modificherebbe src / pacchetti / OGF / gel_python3 / CMakeLists.txt) prima di chiamare find_package per PythonLibs; per esempio:

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

Nel mio caso ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.