J'essayais de construire opencv pour python3. Cependant, cmake définit toujours l'option de construction de python sur python2.7.11 même après avoir spécifié manuellement les options include et lib pour python3:
-- Python 2:
-- Interpreter: /home/ryu/anaconda2/bin/python2.7 (ver 2.7.11)
-- Python 3:
-- Interpreter: /usr/bin/python3 (ver 3.4.3)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython3.4m (ver 3.4.3)
-- numpy: /home/ryu/.local/lib/python3.4/site-packages/numpy/core/include (ver 1.11.0)
-- packages path: lib/python3.4/dist-packages
--
-- **Python (for build): /home/ryu/anaconda2/bin/python2.7**
Ai-je oublié une option de cmake?
OS: Ubuntu 14,04
merci
Vous pouvez remplacer le fichier exécutable python en ajoutant l'argument PYTHON_DEFAULT_EXECUTABLE
à l'URI de l'exécutable python lors de l'invocation cmake
.
cmake {...} -DPYTHON_DEFAULT_EXECUTABLE=$(which python3) ..
J'essayais d'installer opencv sur un Pi3 et cette solution ne fonctionnait pas pour moi car python (pour la construction) était toujours réglé sur Python2.7, mais j'ai constaté qu'en modifiant l'ordre d'une instruction elseif au bas de ' OpenCVDetectPython.cmake 'a résolu le problème. Pour moi, ce fichier se trouve dans '~/opencv-3.3.1/cmake'.
Le segment de code d'origine:
if(PYTHON_DEFAULT_EXECUTABLE)
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
elseif(PYTHON2INTERP_FOUND) # Use Python 2 as default Python interpreter
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
set(PYTHON_DEFAULT_EXECUTABLE "${PYTHON2_EXECUTABLE}")
elseif(PYTHON3INTERP_FOUND) # Use Python 3 as fallback Python interpreter (if there is no Python 2)
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
set(PYTHON_DEFAULT_EXECUTABLE "${PYTHON3_EXECUTABLE}")
endif()
Mon segment de code réordonné:
if(PYTHON_DEFAULT_EXECUTABLE)
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
elseif(PYTHON3INTERP_FOUND) # Use Python 3 as fallback Python interpreter (if there is no Python 2)
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
set(PYTHON_DEFAULT_EXECUTABLE "${PYTHON3_EXECUTABLE}")
elseif(PYTHON2INTERP_FOUND) # Use Python 2 as default Python interpreter
set(PYTHON_DEFAULT_AVAILABLE "TRUE")
set(PYTHON_DEFAULT_EXECUTABLE "${PYTHON2_EXECUTABLE}")
endif()
Je ne connais pas le raisonnement derrière cela, mais cmake est paramétré par défaut sur python2 si python2 existe, en inversant l'ordre de ces instructions elseif, il est remplacé par défaut par python3 s'il existe.
**Disclaimer**
Changer les options dans cmake ne m'a rien apporté, peu importe les options que j'ai modifiées. La solution la plus simple (hacky) pour moi était de
Sudo mv /usr/bin/python2.7 /usr/bin/pythonNO-temp
Ensuite, vous construisez et installez opencv
puis
Sudo mv /usr/bin/pythonNO-temp /usr/bin/python2.7