2014-11-14 50 views
0

一直在愉快地开发一个使用opencv在虚拟环境中整合Python的业余爱好项目。尝试重新命名python virtualenv,opencv错误

今天出于管理的原因,我需要更改虚拟环境的名称。使用virtualenvwrapper与其他项目已经这样做之前没有问题:

cpvirtualenv oldenv newenv 
rmvirtualenv oldenv 

所以基本上完​​全一样,但改名具有相同的PIP副本安装,OpenCV的文件等等。但是现在,当我在newenv运行Python脚本,我得到:

(opencv)[1][email protected] ~/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 

如果我测试蟒蛇品种壳它确认自己是不是正确:

(opencv)[1][email protected] ~/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中工作,上面的所有工作都是有效的。

因此,我的newenv作品取决于oldenv仍然存在。我不明白为什么,因为我可以确认newenv是在文件和结构,包括cv.py等方面的oldenv的副本。

坚持了整整一天,我并不聪明。如果任何人都可以如此善待我,我会非常感激。

回答

0

这很可能是因为在执行import cv时加载了共享库。通过使用rpath来定位共享库,并且大概cpvirtualenv不会更改安装的库的路径。

如果您将它们并排放置,则原始库现在可以找到并且导入成功。

一个解决方案是做一个pip freeeze从旧环境中获得requirements.txt并使用它来获取新环境中的所有包。

+0

@vikramis,谢谢,但'pip freeze --local'对oldenv&newenv,即Pillow,scipy&numpy都会产生相同的结果。 – user3548783 2014-11-15 00:25:58

+0

是的,因为你复制了环境。我说这个副本并没有改变环境中.so文件中的rpath。我只是建议替换'cpvirtualenv'。 – vikramls 2014-11-15 00:28:18

+0

感谢vikramls。使用sublimetext在newenv目录中的所有文件中搜索'oldenv'。这在手动编辑的newenv/bin中返回了一些oldenv结果。还将所有.so文件复制到newenv/lib。我想'cpvirtualenv'并不总是一个全面的重命名virtualenvs的解决方案。 – user3548783 2014-11-15 01:18:17