2015-04-01 3 views
4

Я использую virtualenv и pip на Debian Wheezy. У меня возникла странная проблема, когда пакеты, как представляется, устанавливают ОК, но затем не отображаются в virtualenv.Установленные пакеты с пипсом не показаны в замерзании трубопровода?

Это мой requirements.txt файл:

Django==1.7.7 
psycopg2==2.5.4 
django-geojson==2.6.0 

Если установить его с pip внутри моего virtualenv, он говорит, что было все установлено:

(.venv)$ sudo pip install -r requirements.txt 
Requirement already satisfied (use --upgrade to upgrade): Django==1.7.7 in /usr/local/lib/python2.7/dist-packages (from -r requirements/base.txt (line 1)) 
Requirement already satisfied (use --upgrade to upgrade): psycopg2==2.5.4 in /usr/local/lib/python2.7/dist-packages (from -r requirements/base.txt (line 2)) 
Requirement already satisfied (use --upgrade to upgrade): django-geojson==2.6.0 in /usr/local/lib/python2.7/dist-packages (from -r requirements/base.txt (line 3)) 
Requirement already satisfied (use --upgrade to upgrade): six in /usr/local/lib/python2.7/dist-packages (from django-geojson==2.6.0->-r requirements/base.txt (line 3)) 
Cleaning up... 

Но если я pip freeze проверить то, что установлено, похоже, что pip считает, что у меня совершенно другой набор пакетов, и в частности он не видит djgeojson:

(.venv)$ pip freeze 
Django==1.7.4 
argparse==1.2.1 
coverage==3.7.1 
distribute==0.6.24 
django-debug-toolbar==1.2.1 
gunicorn==19.3.0 
psycopg2==2.5.4 
requirements==0.1 
setproctitle==1.1.8 
sqlparse==0.1.14 
wsgiref==0.1.2 

И если я запускаю терминал Python, Python не может видеть djgeojson.

Почему это происходит? Это довольно запутанно.

+0

Я думаю, проблема в том, что pip устанавливает вещи в '/ usr/local/lib/python2.7/dist-packages', но тогда это не на' sys.path'. Но почему на самом деле пип выбирает устанавливать пакеты куда-то, что не по-своему? – Richard

+0

Почему вы используете sudo для установки, а затем замерзаете без sudo? – Peter

+0

ОК, если я запустил 'sudo pip freeze', я вижу те же версии пакетов. Так что же зависит от того, что «pip» зависит от того, какой пользователь Linux вы используете? Это ... удивительно. – Richard

ответ

7

Ваша проблема заключается в том, что вы установили требования к sudo, и они были установлены в вашей папке библиотеки python системы, а не в библиотеке venv вашей виртуальной среды.

Что делать? Выполните ту же команду, но на этот раз без sudo: pip install -r requirements.txt. Это запустит pip из виртуальной среды и установит пакеты в нужное место.

При активации виртуальной среды эк с source path/to/my/venv/bin/acivate переменной пути $PATH вашего текущего пользователя не обновляется, а затем, когда вы запускаете что-то с Судо, этот новый $ PATH, что вы просто обновляется при активации виртуальной среды больше не тоже самое. То же самое происходит, когда вы открываете новое окно оболочки или регистрируетесь как другой пользователь с su или работает sudo, $PATH переменная не является глобальной системой.

+1

Спасибо за ответ. Проблема в том, что если я пытаюсь установить пакеты без sudo, я получаю ошибки разрешений: '(.venv) $ pip install -r requirements.txt Загрузка/распаковка Django == 1.7.7 (from -r requirements/base.txt (строка 1)) Запуск setup.py egg_info для пакета Django Источник в ./.venv/build/Django имеет версию 1.7, которая не соответствует требованию Django == 1.7.7 (от -r requirements/base. txt (строка 1)) Источник в ./.venv/build/Django имеет версию 1.7, которая конфликтует с Django == 1.7.7 (от -r requirements/base.txt (строка 1)) Хранение полного входа/выхода/me/.pip/pip.log' – Richard

+0

Тогда, если я попытаюсь запустить '(.venv) $ pip, удалите Django', чтобы избавиться от конфликта, я получаю' OSError: [Errno 13] Permission denied: '/WebApps/.venv/Библиотека/python2.7/сайт-пакеты/Django-1.7.4-py2.7.egg-инфо/dependency_links.txt''. Могу ли я исправить это, не используя 'sudo'? – Richard

+0

Думаю, я мог бы использовать 'sudo' для удаления всего в'/webapps/.venv/lib/python2.7/site-packages/Django-1.7.4-py2.7.egg-info' - что может работать? Но я всегда нервничаю из-за удаления файлов, а не для удаления с использованием «официального» маршрута. – Richard

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