Подтвердить что ты не робот

Вопросы виртуального виртуального питона

Я использую 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).

4b9b3361

Ответ 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. Не забывайте пробел после точки.