К моему лучшему, я не нашел пошагового руководства о том, как достичь того, чего я хочу.
Я хотел бы иметь две конфигурации для своих проектов: python2 с opencv2.4 и python3 с opencv3.1. Для этого я клонирую opencv и создаю виртуальную среду, следуя инструкциям из здесь (только не raspberry PI и с CUDA, но это просто еще один флаг при настройке).
В1: Как мне эффективно управлять установкой opencv, когда я создаю другую виртуальную среду для python3? Могу ли я как-то ссылаться на различные папки сборки?
Удаление одной и той же папки сборки, проверка ветки opencv с соответствующей версией и сборка ее каждый раз с нуля, когда я переключаю virtualenv, кажется неоптимальным решением.
(предположим, opencv клонирован в /home/libraries/opencv/
)
Вопрос 2. В разделе 1 руководства описывается установка различных зависимостей для opencv и python. Это перед созданием virtualenv. Могу ли я по-прежнему устанавливать, например, python-dev и python-dev3 одновременно, или я должен перезаписывать вещи в virtualenv?
Q3: Мне удалось правильно установить и символически связать обе версии opencv с соответствующими версиями python в каждом из virtualenv. Однако я не совсем понимаю вывод cmake:
После выполнения cmake
(в virtualenv, который по умолчанию использует python2.7; opencv git checkout 2.4.13
и opencv_contrib в мастере, поскольку для opencv2.4 их нет), он использует python2.7 в качестве интерпретатора. Однако путь пакетов, похоже, не использует virtualenv, почему это так и почему он все еще работает?:
-- Python:
-- Interpreter: /home/josh/.virtualenvs/tfpy2/bin/python2 (ver 2.7.6)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6)
-- numpy: /home/josh/.virtualenvs/tfpy2/local/lib/python2.7/site-packages/numpy/core/include (ver 1.12.0)
-- packages path: lib/python2.7/site-packages
При попытке использовать virtualenv с python3.4 (git checkout 3.1.0
) cmake теперь, похоже, распознает две версии Python, однако, похоже, выбрал неправильную версию 2.7 (но я каким-то образом успешно построил желаемую версию 3.4). Почему он находит python3.4 в virtualenv, а python2.7 нет, а также почему выбирает неправильный python для сборки?:
-- Python 2:
-- Interpreter: /usr/bin/python2.7 (ver 2.7.6)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6)
-- numpy: /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.11.3)
-- packages path: lib/python2.7/dist-packages
--
-- Python 3:
-- Interpreter: /home/josh/.virtualenvs/tfpy3/bin/python3.4 (ver 3.4.3)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython3.4m.so (ver 3.4.3)
-- numpy: /home/josh/.virtualenvs/tfpy3/lib/python3.4/site-packages/numpy/core/include (ver 1.12.0)
-- packages path: lib/python3.4/site-packages
--
-- Python (for build): /usr/bin/python2.7
(Мне известно, что здесь есть какое-то решение, но разве основная идея virtualenv не в том, чтобы автоматически избегать таких проблем? /38500617/wrong-python-packages-path-for-opencv-cmake-installation">здесь, но мной, если в компиляции была распознана/использована неправильная версия python, поэтому нельзя просто создать символическую ссылку на встроенную библиотеку. )