Вопросы виртуального виртуального питона
Я использую VirtualEnv на Windows XP. Мне интересно, правильно ли мне обернули мой мозг:
Я запустил virtualenv ENV
и он создал C:\WINDOWS\system32\ENV
. Затем я изменил переменную PATH
на C:\WINDOWS\system32\ENV\Scripts
вместо C:\Python27\Scripts
. Затем я извлек Django в C:\WINDOWS\system32\ENV\Lib\site-packages\django-trunk
, обновил переменную PYTHON_PATH
новый каталог Django, и продолжил easy_install
другие вещи (которые, конечно же, попадают в мой новый C:\WINDOWS\system32\ENV\Lib\site-packages
).
Я понимаю, почему я должен использовать VirtualEnv, чтобы я мог запускать несколько версий Django и других библиотек на одном компьютере, но означает ли это, что для переключения между средами мне нужно в основном изменить PATH
и PYTHON_PATH
? Итак, я иду от разработки одного проекта Django, который использует Django 1.2 в среде, называемой ENV
и затем изменяю свой PATH
и так, чтобы я мог использовать среду, называемую ENV2
которая имеет версию dev для Django?
Это в основном так, или есть какой-то лучший способ автоматически делать все это (я мог бы обновить свой путь в коде Python, но для этого потребовалось бы написать машинный код в моем приложении)?
Кроме того, как этот процесс сравнивается с использованием VirtualEnv в Linux (я довольно новичок в Linux).
Ответы
Ответ 1
Обычно virtualenv
создает среды в текущем каталоге. Если вы по какой-то причине не собираетесь создавать виртуальные среды в C:\Windows\system32
, я бы использовал другой каталог для сред.
Вам не нужно путаться с путями: используйте activate
script (в <env>\Scripts
), чтобы убедиться, что исполняемый файл и путь Python зависят от среды. Как только вы это сделаете, командное приглашение изменится, чтобы указать среду. Затем вы можете просто вызвать easy_install, и все, что вы установите таким образом, будет установлено в эту среду. Используйте deactivate
, чтобы вернуть все, как было до активации.
Пример:
c:\Temp>virtualenv myenv
New python executable in myenv\Scripts\python.exe
Installing setuptools..................done.
c:\Temp>myenv\Scripts\activate
(myenv) C:\Temp>deactivate
C:\Temp>
Обратите внимание, что мне не нужно указывать путь для deactivate
- activate
для вас, поэтому, когда активированный "Python" запускает Python в virtualenv, а не в вашей системе Python. (Попробуйте - сделайте import sys; sys.prefix
, и он должен напечатать корень вашей среды.)
Вы можете просто активировать новую среду для переключения между средами/проектами, но вам нужно указать весь путь для activate
, чтобы он знал, какая среда должна активироваться. Вам не нужно будет вступать в конфликт с PATH или PYTHONPATH явно.
Если вы используете Windows Powershell, вы можете воспользоваться wrapper. В Linux virtualenvwrapper
(ссылка указывает на порт этого в Powershell) делает жизнь с virtualenv
еще проще.
Обновление: Неправильно, точно, но, возможно, не совсем в духе virtualenv
. Вы можете использовать другой подход: например, если вы устанавливаете Django и что-то еще, что вам нужно для вашего сайта в вашем virtualenv, то вы можете работать в своем каталоге проектов (где вы разрабатываете свой сайт) при активации virtualenv. Поскольку он был активирован, ваш Python найдет Django и все остальное, что вы легко установили в виртуальную среду: и потому, что вы работаете в каталоге проекта, ваши файлы проектов также будут видны на Python.
Дальнейшее обновление:. Вы можете использовать pip
, distribute
вместо setuptools
и просто python setup.py install
с virtualenv
. Просто убедитесь, что вы активировали среду, прежде чем устанавливать что-то в нее.
Ответ 2
Да, в принципе, это то, что делают virtualenv, и это для команды activate
, из документа здесь:
активировать script
Во вновь созданном виртуальном будет бит/активировать оболочку script, или пакетный файл Scripts/activate.bat в Windows.
Это изменит ваш $PATH на укажите виртуальный бит/ каталог. В отличие от работы, это все, что он делает; это удобство. Но если вы используете полный путь, как /path/to/env/bin/python script.py вы не нужно активировать окружающая среда первый. Вы должны использовать источника, поскольку он изменяет окружающая среда на месте. После активации среду, в которой вы можете использовать функция деактивируется, чтобы отменить изменения.
Активировать script также будет изменено в командной строке укажите, среда в настоящее время активна.
поэтому вы должны просто использовать команду activate
, которая сделает все это для вас:
> \path\to\env\bin\activate.bat
Ответ 3
в моем файле проекта wsgi.py у меня есть этот код (он работает с virtualenv, django, apache2 в windows и python 3.4)
import os
import sys
DJANGO_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')
sys.path.append(DJANGO_PATH)
sys.path.append('c:/myproject/env/Scripts')
sys.path.append('c:/myproject/env/Lib/site-packages')
activate_this = 'c:/myproject/env/scripts/activate_this.py'
exec(open(activate_this).read())
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
application = get_wsgi_application()
в файле virtualhost conf у меня есть
<VirtualHost *:80>
ServerName mysite
WSGIScriptAlias / c:/myproject/myproject/myproject/wsgi.py
DocumentRoot c:/myproject/myproject/
<Directory "c:/myproject/myproject/myproject/">
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>
Ответ 4
в Windows у меня установлен python 3.7, и я все еще не могу активировать virtualenv
из Gitbash с помощью ./Scripts/activate
хотя он работал из Powershell после запуска Set-ExecutionPolicy Unrestricted
в Powershell и изменения параметра "Да для всех".
Мне не нравится Powershell, и мне нравится использовать Gitbash, поэтому для активации virtualenv
в Gitbash сначала перейдите в папку вашего проекта, используйте ls
для просмотра содержимого папки и убедитесь, что вы видите "Сценарии". Измените каталог на "Сценарии", используя cd Scripts
, как только вы в пути "Сценарии" использовать . activate
. activate
чтобы активировать virtualenv
. Не забывайте пробел после точки.