2013-12-10 4 views
0

Я смущен насчет virtualenv. Я читал документы и примерные примеры, но не улучшался.Как установить только с virtualenv?

Я создал virtualenv следующим образом:

$ virtualenv myapp_venv --no-site-package 

Я использовал --no-site-packages, потому что я хочу знать, что мой requirements.txt достаточно для сборки и запуска моего кода. Я не хочу зависеть от того, что может быть установлено на моей машине dev.

Затем я пытаюсь установить зависимости в мой virtualenv:

$ source myapp_venv/bin/activate 
(myapp_venv) $ sudo pip install -r requirements.txt 

На данный момент я получаю множество сообщений, как это:

Requirement already satisfied (use --upgrade to upgrade): Flask==0.10.1 in /usr/local/lib/python2.7/dist-packages (from -r requirements.txt (line 1)) 

Это удивляет меня, как я думал virtualenv не будет иметь дело с глобально доступными пакетами, но с окружающей средой этого проекта.

Когда я перехожу, чтобы попытаться запустить приложение:

(myapp_venv) $ python run.py 
Traceback (most recent call last): 
    File "run.py", line 1, in <module> 
    from app import app 
    File "/home/eric/code/python/tournament/app/__init__.py", line 1, in <module> 
    from flask import Flask 
ImportError: No module named flask 

Но если я деактивировать virtualenv, приложение работает просто отлично.

Как я могу установить pip для установки пакетов в virtualenv?

Для контекста я профессионально опытен Java/Maven. У меня немного языковой опыт на Python, но экосистема Python по-прежнему нова для меня.

ответ

2

Пропустите sudo, и со мной все будет в порядке. Судо говорит установить глобально.

+0

Ничего себе, я никогда не знал, что «sudo» будет иметь такой эффект. Очень неожиданно. –

+0

Когда вы используете sudo, вы действуете как root. Когда вы действуете как root pip, он будет установлен на глобальном уровне. Так как флешка уже установлена ​​в вашей системе по всему миру, это даст вам это уже удовлетворенное требование. Но когда вы запускаете virtualenv локально без пакетов-сайтов, он не найдет его, поскольку этот параметр изолирует virtualenv от глобальных модулей. –

0

Проверьте no-global-site-packages.txt на своем lib.

Если no-global-site-packages.txt файл находится в lib папке, тогда он будет принимать все пакеты от вашего virtualenv еще. Он будет принимать глобально.

Также, как сказал wissam, не используйте sudo. Верно. потому что используя sudo, оно установит глобально.