Пакеты 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), поэтому я не думаю, что это актуально здесь.