web-dev-qa-db-fra.com

comment compiler opencv pour python3 lorsque python2 et python3 sont installés

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

9
user5671315

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) ..
25

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**

  1. J'utilisais le script disponible sur https://Gist.github.com/willprice/c216fcbeba8d14ad1138 pour tout télécharger, tout installer et tout construire (Le script a été modifié pour ne pas créer d'environnement virtuel tel que je ne l'ai pas été. Je veux un et j1 pas j4 car il a échoué à environ 85% lorsqu’il est exécuté avec plusieurs cœurs).
  2. Je ne pense pas que le fichier pertinent existe tant que vous n'avez pas tenté de générer.
1
Andy B

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

0
wprins