很高兴使用opencv在虚拟环境中开发一个包含python的爱好项目。
今天出于管理原因,我需要更改虚拟环境的名称。之前已经使用virtualenvwrapper进行了其他项目而没有问题:
cpvirtualenv oldenv newenv
rmvirtualenv oldenv
所以基本完全相同,但重命名的副本使用相同的pip安装,opencv文件等。但是现在当我在newenv中运行python脚本时,我得到:
(opencv)[1]dan@dual-lt ~/PyProjects/facedetect $ python facedetectlive.py
Traceback (most recent call last):
File "facedetectlive.py", line 10, in <module>
import cv
File "/home/dan/PyProjects/.virtualenvs/opencv/lib/python2.7/site-packages/cv.py", line 1, in <module>
from cv2.cv import *
ImportError: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
如果我从python shell测试cv,它确认某些内容不对:
(opencv)[1]dan@dual-lt ~/PyProjects/facedetect $ python
Python 2.7.5+ (default, Sep 17 2013, 15:31:50)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/dan/PyProjects/.virtualenvs/opencv/lib/python2.7/site-packages/cv.py", line 1, in <module>
from cv2.cv import *
ImportError: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
>>> import numpy
>>> import scipy
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
奇怪的是,如果我恢复oldenv所以newenv和oldenv并排在.virtualenvs然后上面的所有工作,即使我在newenv工作。
因此,对于我的新作品,取决于oldenv仍在那里。我不明白为什么我可以确认newenv是文件和结构(包括cv.py等)的oldenv的副本。
坚持了一整天,我没有聪明。如果有人能够如此友善,我就会非常感激。
答案 0 :(得分:0)
这可能是因为在执行import cv
时加载了共享库。使用rpath找到共享库,并且cpvirtualenv
可能不会更改已安装库的rpath。
当你并排使用它们时,原始库现在可以找到并且导入成功。
一种解决方案是使用pip freeeze
从旧环境中获取requirements.txt
并使用它来获取新环境中的所有包。