OpenCV и python / virtualenv?

Я работаю над проектом на python, который использует OpenCV (2.3.1), среди других библиотек. До сих пор я просто apt-устанавливал все, но теперь хочу поделиться своим кодом с кем-то, у кого может не быть уже установленного. Итак, virtualenv кажется идеальным решением, но я понимаю это.

$ python src/importcv.py # does nothing but import cv, no problems $ virtualenv . # create virtualenv here $ source bin/activate # activates this virtualenv (p)$ python src/importcv.py Traceback (most recent call last): File "src/test.py", line 1, in <module> import cv ImportError: No module named cv 

Было ли что-то неправильно в том, как я настроил virtualenv, или мне нужно сделать еще один шаг, чтобы он мог видеть мои привязки python opencv?

Virtualenv создает отдельную среду python. Вам нужно будет переустановить все ваши зависимости. EDIT это правда, пип, похоже, не играет хорошо с opencv. Ошибка отсутствующего модуля может быть решена путем копирования cv shared object на ваш virtualenv. Дополнительная информация в вопросе, указанном ниже.

Я использую make-файлы в своих проектах для установки OpenCV внутри Python virtualenv. Ниже приведен пример шаблона. Это требует, чтобы у вас уже есть привязки OpenCV для вашей системы Python ( /usr/bin/python ), которые вы можете использовать с помощью yum install opencv-python или apt-get install python-opencv .

Сделайте первый запрос системой cv2 модуля Python и найдите местоположение установленного файла библиотеки. Затем он копирует cv2.so в каталог virtualenv.

 VENV_LIB = venv/lib/python2.7 VENV_CV2 = $(VENV_LIB)/cv2.so # Find cv2 library for the global Python installation. GLOBAL_CV2 := $(shell /usr/bin/python -c 'import cv2; print(cv2)' | awk '{print $$4}' | sed s:"['>]":"":g) # Link global cv2 library file inside the virtual environment. $(VENV_CV2): $(GLOBAL_CV2) venv cp $(GLOBAL_CV2) $@ venv: requirements.txt test -d venv || virtualenv venv . venv/bin/activate && pip install -r requirements.txt test: $(VENV_CV2) . venv/bin/activate && python -c 'import cv2; print(cv2)' clean: rm -rf venv 

(Вы можете скопировать-вставить выше фрагмента в Makefile, но обязательно замените отступы на символы табуляции, запустив sed -is:' ':'\t':g Makefile или аналогичный.)

Теперь вы можете запустить шаблон:

 echo "numpy==1.9.1" > requirements.txt make make test 

Обратите внимание, что вместо символической ссылки мы фактически копируем файл .so, чтобы избежать описанной здесь проблемы: https://stackoverflow.com/a/19138136/1510289