2014-11-14 5 views
0

opencv를 사용하는 가상 환경에서 파이썬을 통합하는 취미 프로젝트에 행복하게 일해 왔습니다.python virtualenv, opencv errors의 이름을 바꾸려고 시도했습니다.

관리자 용으로 오늘 가상 환경의 이름을 변경해야했습니다. virtualenvwrapper 사용하여 문제없이 다른 프로젝트 그렇게 해본 적이 : 나는 newenv에서 파이썬 스크립트를 실행할 때 등

cpvirtualenv oldenv newenv 
rmvirtualenv oldenv 

그래서 기본적으로 동일한하지만 같은 핍 복사가 설치 이름 OpenCV의 파일을 그러나 지금은 얻을 :

내가 파이썬에서 이력서가 쉘 테스트하는 경우가 뭔가를 확인
(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 

바로되지 않습니다 : 내가 newenv 있도록 oldenv을 복원 할 경우

(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는 .virtualenvs에 나란히 있습니다. 위의 모든 것은 newenv에서 작업하고 있습니다.

내 newenv 작품은 oldenv에 따라 달라집니다. 나는 newenv가 cv.py 등을 포함한 파일 및 구조 측면에서 oldenv의 카피 본이라고 확신 할 수없는 이유를 이해하지 못한다.

하루 종일 지속되었고 나는 더 현명하지 못했다. 누구든지 나를 친절하게 대해주는 친절한 사람이라면 매우 감사 할 것입니다.

답변

0

import cv 할 때 공유 라이브러리가로드되어 있기 때문일 수 있습니다. 공유 라이브러리는 rpath을 사용하여 위치하며 아마도 cpvirtualenv은 설치된 라이브러리의 rpath를 변경하지 않습니다.

나란히두면 원래 라이브러리를 찾을 수 있고 가져 오기가 성공합니다.

한 가지 해결책은 pip freeeze을 사용하여 이전 환경에서 requirements.txt을 얻고이를 사용하여 새 환경에서 모든 패키지를 가져 오는 것입니다.

+0

@vikramis, 고맙지 만'pip freeze --local'은 oldenv & newenv, 즉 Pillow, scipy 및 numpy에 대해 동일한 결과를 산출합니다. – user3548783

+0

예. 환경을 복사 한 이후입니다. 나는 복사본이 환경의 .so 파일에서 rpath를 변경하지 않는다고 말하고있다. 나는 단순히'cpvirtualenv'를 대체 할 것을 제안하고있었습니다. – vikramls

+0

감사합니다 vikramls. newenv 디렉토리의 모든 파일에서 'oldenv'를 검색하기 위해 sublimetext를 사용했습니다. 이것은 수동으로 편집 한 newenv/bin에서 일부 oldenv 결과를 반환했습니다. 또한 모든 .so 파일을 통해 newenv/lib로 복사됩니다. 난'cpvirtualenv' 항상 virtualenvs의 이름을 바꾸기위한 포괄적 인 솔루션되지 않습니다 것 같아요. – user3548783