web-dev-qa-db-fra.com

J'ai 2 versions de python installées, mais cmake utilise une version plus ancienne. Comment forcer cmake à utiliser la nouvelle version?

J'ai 2 versions de python installées, mais cmake utilise une version plus ancienne. Comment forcer cmake à utiliser la version la plus récente? 

39
Sanjeev

Vous pouvez essayer l'un ou l'autre en fonction de vos besoins:

find_package( PythonInterp 2.7 REQUIRED )
find_package( PythonLibs 2.7 REQUIRED )

Voir: CMake docs

29
jadelord

Essayez d'ajouter -DPYTHON_EXECUTABLE:FILEPATH=/path/to/python2.7Il pourrait y avoir un problème de chemin?

Vous pouvez également spécifier le chemin d'accès à votre bibliothèque python. Utilisez la version de votre choix: 

 cmake -DPYTHON_LIBRARIES=/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib .
21
Paul

J'ai eu un problème similaire et je l'ai résolu en utilisant la réponse de Paul comme allusion. J'avais besoin d'utiliser python2.7 pour compiler une bibliothèque plus ancienne, mais cmake continue de récupérer mes bibliothèques python3.2 (et mon exécutable).

D'abord, j'ai exécuté cmake avec les options par défaut, puis modifié le fichier CMakeCache.txt qu'il a généré. Je l'ai fait principalement parce que je ne connaissais pas les incantations -D... propres à provoquer cmake pour obtenir la bibliothèque Python et les chemins d'accès, etc.

Dans mon CmakeCache.txt, j'ai trouvé des lignes comme celle-ci

  • Chemin vers un programme

    PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python
    
  • Chemin vers un répertoire

    PYTHON_INCLUDE_DIR:PATH=/usr/include/python3.2
    
  • Chemin vers une bibliothèque

    PYTHON_LIBRARY:FILEPATH=/usr/lib/libpython3.2.so
    

Et remplacé chaque occurrence de python3.2 par python2.7. J'ai également dû renommer le PYTHON_EXECUTABLE pour utiliser python2.7, car python est un lien symbolique vers python3.2 sur mon système.

Ensuite, je répète cmake. Comme il préfère ses valeurs en cache à la recherche des bibliothèques, cela devrait fonctionner dans tous les cas. Au moins, il l'a fait dans le mien.

21
jpaugh

J'utilise anaconda (python 2.7.8) ainsi que python 2.7.6.

J'ai essayé -DPYTHON_EXECUTABLE:FILEPATH=$ANACONDA_HOME/bin, mais la version 1.4 a été trouvée (bizarre :).

Ma solution le change en PYTHON_EXECUTABLE:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TIFF=ON \
-DPYTHON_LIBRARY=$ANACONDA_HOME/lib/libpython2.7.so \
-DPYTHON_INCLUDE_DIR=$ANACONDA_HOME/include/python2.7/ \
-DPYTHON_EXECUTABLE=$ANACONDA_HOME/bin/python
6
X.H. Jiang

Mon cas d'utilisation était un projet assez volumineux dans lequel les classes C++ étaient rendues disponibles pour les scripts Python via Boost.Python. Après avoir lutté contre les diverses bizarreries de l'interpréteur et de la détection de bibliothèque Python de CMake, j'ai finalement abandonné et lancé le mien. Mon approche est basée sur une version légèrement post-modifiée du script python-config qui est parfois (mais pas toujours!) Insérée dans un environnement virtuel nouvellement créé ( voir cet article SO dans pyvenv pour ces questions, mais je m'éloigne du sujet). Ce script est appelé par un petit extrait de code CMake pyconfig.cmake. Les deux sont disponibles gratuitement sur le dépôt GitHub cmake-python-config

Avertissement: Les scripts supposent que vous avez un interpréteur Python 3 dans votre PATH. La détection de Python 2 n’est pas tentée. Les scripts ne pas tentent de trouver tout versions installées de Python3.

0
Laryx Decidua