как создать opencv для python3, когда установлены как python2, так и python3

Я пытался создать opencv для python3. Однако cmake всегда задает параметр python build как python2.7.11 даже после того, как я вручную указал параметр include и lib для 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**

Я пропустил какой-то вариант cmake?

ОС: Ubuntu 14,04

благодаря

Ответ 1

Вы можете переопределить исполняемый файл python для сборки, добавив аргумент PYTHON_DEFAULT_EXECUTABLE с исполняемым URI- PYTHON_DEFAULT_EXECUTABLE python во время вызова cmake.

cmake {...} -DPYTHON_DEFAULT_EXECUTABLE=$(which python3) ..

Ответ 2

Я пытаюсь установить opencv на Pi3, и это решение не сработало для меня, поскольку python (для сборки) всегда был установлен в Python2.7, но я обнаружил, что, изменив порядок инструкции elseif в нижней части ' OpenCVDetectPython.cmake 'исправил проблему. Для меня этот файл находится в '~/opencv-3.3.1/cmake'.

Исходный сегмент кода:

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()

Мой отредактированный сегмент кода:

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()

Я не знаю аргументов позади этого, но cmake установлен по умолчанию на python2, если существует python2, заменяя порядок этих elseif-инструкций, переключает его по умолчанию на python3, если он существует

** Отказ от ответственности **

  1. Я использовал скрипт, найденный по адресу https://gist.github.com/willprice/c216fcbeba8d14ad1138, чтобы загрузить, установить и построить все (сценарий был изменен, чтобы не создавать виртуальную среду, поскольку я не хотел ее, а с j1 не j4 как он провалился около 85% при работе с несколькими ядрами).
  2. Я не думаю, что соответствующий файл существует до тех пор, пока вы не попытаетесь создать сборку.

Ответ 3

Изменение параметров в cmake ничего не сделало для меня независимо от того, какие параметры я модифицировал. Самое простое (хакерское) решение для меня состояло в том, чтобы

sudo mv/usr/bin/python2.7/usr/bin/pythonNO-temp

Затем вы создаете и устанавливаете opencv

тогда

sudo mv/usr/bin/pythonNO-temp/usr/bin/python2.7

Ответ 4

Я боролся с этим в течение нескольких часов, и ответы, упомянутые выше, не решали проблему сразу.

Добавляя к ответу Ивана, я должен был включить эти флаги в cmake, чтобы сделать эту работу:

-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_opencv_python3=ON \
-D HAVE_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=<path_to_python3> 

Я оставляю это здесь, так что это может быть полезно для кого-то еще в будущем.