2014-11-14 2 views
0

Успешно работали над проектом хобби, включающим python в виртуальной среде с использованием opencv.Попытка переименовать python virtualenv, ошибки opencv

Сегодня по причинам администратора мне нужно было изменить имя виртуального env. Сделал так, прежде чем с другими проектами без проблем с использованием virtualenvwrapper:

cpvirtualenv oldenv newenv 
rmvirtualenv oldenv 

Так в основном точно такие же, но переименована копия с таким же пипом устанавливает, OpenCV файлов и т.д. Однако теперь, когда я бег сценария питона в newenv я получаю:

(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 в отношении файлов и структуры, включая cv.py и т. Д.

Сохранялись весь день, и я не мудрее. Если кто-то может быть так добр, чтобы меня исправить, я был бы очень благодарен.

ответ

0

Это, скорее всего, из-за загрузки разделяемых библиотек, когда вы делаете import cv. Общие библиотеки расположены с использованием rpath, и, предположительно, cpvirtualenv не изменяет путь к установленным библиотекам.

Если у вас есть бок о бок, исходные библиотеки теперь доступны для поиска и импорт успешно завершен.

Одним из решений является сделать pip freeeze, чтобы получить requirements.txt из старой среды и использовать его для получения всех пакетов в новой среде.

+0

@vikramis, спасибо, но 'pip freeze --local' производит одинаковые результаты как для oldenv & newenv, а именно для подушки, scipy & numpy. – user3548783

+0

Да, с тех пор, как вы скопировали среду. Я говорю, что копия не изменила rpath в файлах .so в среде. Я просто предлагал заменить «cpvirtualenv». – vikramls

+0

Спасибо vikramls. Используется sublimetext для поиска «oldenv» во всех файлах в каталоге newenv. Это вернуло некоторые старые результаты в newenv/bin, которые я вручную редактировал. Также скопировали все файлы .so в newenv/lib. Я думаю, 'cpvirtualenv' не всегда является всеобъемлющим решением для переименования virtualenvs. – user3548783

Смежные вопросы