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