как создать 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, если он существует
** Отказ от ответственности **
- Я использовал скрипт, найденный по адресу https://gist.github.com/willprice/c216fcbeba8d14ad1138, чтобы загрузить, установить и построить все (сценарий был изменен, чтобы не создавать виртуальную среду, поскольку я не хотел ее, а с j1 не j4 как он провалился около 85% при работе с несколькими ядрами).
- Я не думаю, что соответствующий файл существует до тех пор, пока вы не попытаетесь создать сборку.
Ответ 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>
Я оставляю это здесь, так что это может быть полезно для кого-то еще в будущем.