it-swarm.com.de

Ich habe 2 Versionen von Python installiert, aber cmake verwendet eine ältere Version. Wie zwinge ich cmake, die neuere Version zu verwenden?

Ich habe 2 Versionen von Python installiert, aber cmake verwendet eine ältere Version. Wie erzwinge ich cmake , um die neuere Version zu verwenden? 

39
Sanjeev

Sie können eines davon ausprobieren, je nachdem, was Sie benötigen:

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

Siehe: CMake docs

29
jadelord

Versuchen Sie, -DPYTHON_EXECUTABLE:FILEPATH=/path/to/python2.7 hinzuzufügen. Es könnte ein Pfadproblem sein.

Sie können auch den Pfad zu Ihrer Python-Bibliothek angeben und Ihre gewünschte Version verwenden: 

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

Ich hatte ein ähnliches Problem und löste es mit Pauls Antwort als Hinweis. Ich musste python2.7 verwenden, um eine ältere Bibliothek zu kompilieren, aber cmake nimmt ständig meine python3.2-Bibliotheken (und die ausführbare Datei) auf.

Zuerst habe ich cmake mit Standardoptionen ausgeführt und dann die CMakeCache.txt-Datei bearbeitet, die sie generiert hat. Ich habe es auf diese Weise vor allem deshalb gemacht, weil ich die richtigen -D...-Beschwörungen nicht kannte, um cmake zu veranlassen, die Python-Bibliothek zu erhalten und Pfade usw. direkt einzubinden.

In meinem CmakeCache.txt habe ich solche Zeilen gefunden

  • Pfad zu einem Programm

    PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python
    
  • Pfad zu einem Verzeichnis

    PYTHON_INCLUDE_DIR:PATH=/usr/include/python3.2
    
  • Pfad zu einer Bibliothek

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

Und jedes Vorkommen von python3.2 durch python2.7 ersetzt. Ich musste auch PYTHON_EXECUTABLE umbenennen, um python2.7 zu verwenden, da python ein Symlink zu python3.2 auf meinem System ist.

Dann reran ich cmake. Da die zwischengespeicherten Werte der Suche nach Bibliotheken vorgezogen werden, sollte dies in allen Fällen funktionieren. Zumindest tat es bei mir.

21
jpaugh

Ich benutze Anaconda (Python 2.7.8) sowie Python 2.7.6.

Ich habe versucht -DPYTHON_EXECUTABLE:FILEPATH=$ANACONDA_HOME/bin, aber Version 1.4 gefunden (komisch :).

Meine Lösung ändert es in 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

Mein Anwendungsfall war ein ziemlich umfangreiches Projekt, bei dem C++ - Klassen über Boost.Python für Python-Skripts verfügbar gemacht wurden. Nachdem ich mit den verschiedenen Macken von CMakes Python-Interpreter und -Bibliothekserkennung gekämpft hatte, gab ich schließlich auf und rollte meine eigenen. Mein Ansatz basiert auf einer etwas nachbearbeiteten Version des python-config-Skripts, das manchmal (aber nicht immer!) In eine neu erstellte virtuelle Umgebung eingefügt wird ( siehe diesen SO -Posten auf pyvenv für diese Fragen, aber ich schweife ab). Dieses Skript wird von einem kleinen CMake-Snippet pyconfig.cmake aufgerufen. Beide sind im GitHub-Repo cmake-python-config frei verfügbar. 

Warnung: Die Skripts setzen voraus, dass sich in Ihrer PATH ein Python 3-Interpreter befindet. Die Erkennung von Python 2 wird nicht versucht. Die Skripte versuchen nicht nicht, alle installierten Versionen von Python3 zu finden.

0
Laryx Decidua