17 votes

CMake ne trouve pas PythonLibs

J'essaie de construire inria Graphite sur mon ubuntu qui tourne dans un simulateur VirtualBox, je suis les instructions, et j'installe les python-dev mais quand je lance cmake, j'ai toujours une erreur :

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)

J'ai vérifié le /usr/lib/ et trouver

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

Alors pourquoi cmake ne trouve pas les PythonLibs, ou comment dois-je gérer cela ?

25voto

helgar Points 351

Installation de python-dev a en fait réglé le problème pour moi :

sudo apt-get install python-dev

J'ai compris l'allusion ici : https://github.com/Valloric/YouCompleteMe/issues/484

11voto

malatio Points 395

Le problème semble être qu'Ubuntu 14.04 installe Python 3.4 par défaut et que la version CMake d'Ubuntu (2.8) ne recherche que jusqu'à Python 3.3. Une solution de contournement consiste à ajouter set(Python_ADDITIONAL_VERSIONS 3.4) avant le find_package déclaration. Notez que j'ai déposé une bogue sur cette question.

Depuis CMake 3.0, CMake recherche jusqu'à Python 3.4 L'installation manuelle de cette version devrait également résoudre le problème.

7voto

Dirk Bester Points 171

Pour moi, le problème était un mauvais cache

rm CMakeCache.txt

J'ai supprimé le cache avec l'ancienne version 2.7 et lui ai permis de trouver la 3.2 dans mon cas.

Le cmake que j'ai utilisé est

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})

1voto

user68804 Points 11

J'ai récemment eu un problème similaire avec Ubuntu 14.04 64-bit ; apparemment, CMake ne regarde pas dans les dossiers d'installation dépendant de l'architecture par défaut :

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.

(tiré de la documentation en ligne de CMake 2.8.12 sur l'option commande find_package )

Une solution consiste à définir cette CMAKE_LIBRARY_ARCHITECTURE dans le fichier CMakeLists.txt de la racine du projet (dans votre cas, il s'agirait de modifier src/packages/OGF/gel_python3/CMakeLists.txt) avant d'appeler find_package pour PythonLibs ; par exemple :

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

Cela a fonctionné dans mon cas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X