Пакеты Python не устанавливаются в virtualenv с помощью pip
у меня возникли проблемы с установкой twisted
pip --version
pip 1.1 от / главная/chris/GL/GLBackend/glenv/lib / python2.7 / site-packages / pip-1.1-py2.7.яйцо (python 2.7)
создать виртуальную среду
chris@chris-mint ~/GL/GLBackend $ sudo virtualenv -p python2.7 glenv
запуск virtualenv с интерпретатором / usr/bin / python2.7 Новый python исполняемый в glenv/Бен/вместо python2.7 также создает исполняемый в установка glenv/bin/python распространять.............................................................................................................................................................................................сделанный. Установка pip...............сделанный.
на всякий случай, я включу все разрешения
chris@chris-mint ~/GL/GLBackend $ sudo chmod -R 777 glenv
chris@chris-mint ~/GL/GLBackend $ source glenv/bin/activate
(glenv)chris@chris-mint ~/GL/GLBackend $ pip freeze
argparse==1.2.1 distribute==0.6.24 wsgiref==0.1.2
twisted не указан здесь как установлено
(glenv)chris@chris-mint ~/GL/GLBackend $ sudo pip install twisted
требование уже удовлетворено (польза --подъем для того чтобы модернизировать): переплетенный внутри / usr / local/lib / python2.7 / требование к dist-упаковкам уже выполнено (используйте --upgrade для обновления): zope.интерфейс>=3.6.0 in / usr / local/lib / python2.7 / требования к dist-упаковкам (от скрученных) уже удовлетворен (используйте --upgrade to upgrade): распространение в / usr / local/lib / python2.7 / dist-пакеты (от синец.интерфейс>=3.6.0 - > twisted) очистка... (гленв)Крис@chris-mint ~/GL / GLBackend $ pip uninstall twisted не может удалить требование twisted, не установлен хранение полного входа в систему / домой / Крис/.пип/пип.log
но когда я устанавливаю его, он говорит, что он уже установлен. Принудительная установка:
sudo pip install -I twisted
загрузка / распаковка twisted загрузка Twisted-12.3.0.деготь.bz2 (2.6 Mb): 2.6 Mb загруженный запуск setup.py egg_info для пакета витой . . .
успешно установлен twisted zope.интерфейс распределяет очистку вверх...
и все же он еще не установлен
(glenv)chris@chris-mint ~/GL/GLBackend $ pip freeze
argparse==1.2.1 distribute==0.6.24 wsgiref==0.1.2
* * когда я пытаюсь запустить скрипты Python, которые используют twisted, я получаю сообщение об ошибке, что twisted не установлен. То есть:
ImportError: нет модуля с именем twisted.python**
1 ответов
проблема здесь в том, что вы используете sudo
когда вы не должны быть. И это вызывает pip
чтобы попытаться установить в /usr/local/lib
вместо ~/glenv/lib
. (И, потому что вы использовали sudo
, это успешно делает это, но это не помогает вам, потому что вы не разрешаете системные пакеты сайта в вашем venv.)
есть несколько причин sudo pip
может привести к такому поведению, но, скорее всего, это: на большинстве систем (включая различные коробки Mac и RHEL/CentOS, которые у меня есть непосредственный доступ к), к sudoers
файл сбросит вашу среду, а затем добавит обратно в несколько переменных среды в белом списке. Это означает, что когда вы sudo pip
, он не будет видеть переменные среды, которые virtualenv
настраивается, поэтому он вернется к работе по умолчанию и установит в вашу систему Python вместо вашего venv.
но на самом деле, это не важно почему это происходит. Ответ тот же: просто сделай pip install
вместо sudo pip install
.
обратите внимание, что вы и удалить sudo
на virtualenv
вызов, так как это, вероятно, приведет к неправильной настройке venv (поэтому вам нужен sudo chmod
, которое не было бы необходимо в противном случае). Весь смысл установки вещей в домашнем каталоге пользователя заключается в том, что вы можете сделать это с обычными разрешениями пользователя.
в качестве примечания, вы также можете обновить до более нового virtualenv
/pip
, а 1.8 и 1.2 некоторые исправления и улучшения. Но я проверил, что получаю точно такую же проблему, как и вы, даже с последними версиями (1.8.4 и 1.2.1), поэтому я не думаю, что это актуально здесь.