OpenCV et python / virtualenv?

Je travaille sur un projet en python qui utilise OpenCV (2.3.1), parmi d’autres bibliothèques. Jusqu’ici, je viens juste de tout installer, mais maintenant je veux partager mon code avec quelqu’un qui n’a peut-être pas encore tout installé. Ainsi, virtualenv semble être la solution parfaite, mais je comprends.

$ 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  import cv ImportError: No module named cv 

Y a-t-il quelque chose qui n’allait pas dans la configuration de virtualenv ou dois-je faire une autre étape pour voir mes liaisons de python?

Virtualenv crée un environnement Python distinct. Vous devrez réinstaller toutes vos dépendances. EDIT il est vrai que le pip ne semble pas bien jouer avec l’opencv. L’erreur de module manquante peut être résolue en copiant l’object partagé cv dans votre virtualenv. Plus d’infos dans la question liée ci-dessous.

J’utilise makefiles dans mes projets pour installer OpenCV dans Python virtualenv. Vous trouverez ci-dessous un exemple standard. Cela nécessite que vous ayez déjà des liaisons OpenCV pour votre système Python ( /usr/bin/python ) que vous pouvez utiliser avec quelque chose comme yum install opencv-python ou apt-get install python-opencv .

Faites d’abord en cv2 module cv2 du système Python et récupère l’emplacement du fichier de bibliothèque installé. Ensuite, il copie cv2.so dans le répertoire 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 

(Vous pouvez copier-coller l’extrait de code ci-dessus dans un fichier Makefile, mais assurez-vous de remplacer les indentations par des caractères de tabulation en exécutant sed -is:' ':'\t':g Makefile ou similaire.)

Vous pouvez maintenant exécuter le modèle:

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

Notez qu’au lieu de lien symbolique, nous copions en fait le fichier .so afin d’éviter tout problème noté ici: https://stackoverflow.com/a/19138136/1510289