Ich habe 2 Versionen von Python installiert, aber cmake verwendet eine ältere Version. Wie erzwinge ich cmake , um die neuere Version zu verwenden?
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
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 .
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.
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
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.