Пакеты Python не устанавливаются в virtualenv с помощью pip

У меня возникли проблемы с установкой витой

pip --version

пункт 1.1 из /home/chris/GL/GLBackend/glenv/lib/python 2.7/site-packages/pip-1.1-py2.7.egg(python 2.7)

Создать виртуальную среду

[email protected] ~/GL/GLBackend $ sudo virtualenv -p python2.7 glenv

Запуск virtualenv с помощью интерпретатора /usr/bin/python 2.7 Новый питон исполняемый файл в glenv/bin/python2.7 Также создание исполняемого файла в glenv/bin/python Установка распространять.............................................................................................................................................................................................сделанный. Установка протокола................ Done.

На всякий случай, я включу все разрешения

[email protected] ~/GL/GLBackend $ sudo chmod -R 777 glenv

[email protected] ~/GL/GLBackend $ source glenv/bin/activate


(glenv)[email protected] ~/GL/GLBackend $ pip freeze

argparse == 1.2.1 распространять == 0.6.24 wsgiref == 0.1.2

скрученный не указан здесь как установленный

(glenv)[email protected] ~/GL/GLBackend $ sudo pip install twisted

Требование уже выполнено (используйте --upgrade to upgrade): скрученный в /usr/local/lib/python 2.7/dist-packages Требование уже выполнено (используйте --upgrade для обновления): zope.interface >= 3.6.0 в /usr/local/lib/python 2.7/dist-packages (из скрученного) Требование уже выполнено (используйте --upgrade to upgrade): распространяйте в /usr/local/lib/python 2.7/dist-packages (от zope.interface >= 3.6.0- > скрученный) Очистка... (glenv) chris @chris-mint ~/GL/GLBackend $pip uninstall twisted Не удается удалить требование скрученный, не установлен. Сохранение полного входа в систему /home/chris/.pip/pip.log

Но когда я устанавливаю его, он говорит, что он уже установлен. Принудительная установка:

sudo pip install -I twisted

Загрузка/распаковка скрученных Загрузка Twisted-12.3.0.tar.bz2 (2.6Mb): загружено 2.6Mb Запуск setup.py egg_info для пакета скрученный      ,.

Успешно установлен скрученный zope.interface distribute Очистка до...

И все же он все еще не установлен

(glenv)[email protected] ~/GL/GLBackend $ pip freeze

argparse == 1.2.1 распространять == 0.6.24 wsgiref == 0.1.2

** Когда я пытаюсь запустить скрипты Python, которые используют скручен, я получаю сообщение об ошибке, что скрученный не установлен. То есть:

ImportError: нет модуля с именем twisted.python **

Ответ 1

Проблема заключается в том, что вы используете sudo, когда вам не следует. И это приводит к тому, что pip пытается установить в /usr/local/lib вместо ~/glenv/lib. (И поскольку вы использовали sudo, он успешно это сделал, но это вам не поможет, потому что вы не разрешаете системные сайты-пакеты в вашем вену.)

Существует несколько причин, по которым sudo pip может привести к такому поведению, но наиболее вероятно следующее: в большинстве систем (включая различные блоки Mac и RHEL/CentOS у меня есть немедленный доступ), файл sudoers будет reset ваша среда, а затем добавьте обратно в несколько переменных среды белого списка. Это означает, что когда вы sudo pip, он не увидит переменные среды, которые virtualenv настроится, поэтому он вернется к выполнению задачи по умолчанию и установит в вашу систему Python вместо вашего venv.

Но на самом деле, не имеет значения, почему это происходит. Ответ один и тот же: просто pip install вместо sudo pip install.

Обратите внимание, что вы также хотите удалить sudo в вызове virtualenv, так как это, вероятно, приведет к неправильной настройке венва (поэтому вам нужен sudo chmod, который не понадобится в противном случае). Весь смысл устанавливать вещи в домашнем каталоге вашего пользователя - это вы можете сделать это с вашими обычными разрешениями пользователей.

В качестве дополнительной заметки вы также можете перейти на новый virtualenv/pip, так как 1.8 и 1.2 имеют некоторые исправления и улучшения ошибок. Но я подтвердил, что получаю точно такую ​​же проблему, как и с последними версиями (1.8.4 и 1.2.1), поэтому я не думаю, что это актуально здесь.