我在Windows XP上使用VirtualEnv。我想知道我的大脑是否正确缠绕它:
我跑了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项目,它在一个名为ENV
的环境中使用Django 1.2,然后更改我的PATH
等,以便我可以使用一个名为ENV2
的环境,它具有Django的开发版本?
这基本上是它,还是有一些更好的方法来自动完成所有这些(我可以在Python代码中更新我的路径,但这需要我在我的应用程序中编写机器特定的代码)?
此外,这个过程与在Linux上使用VirtualEnv相比如何(我是Linux的初学者)。
通常,virtualenv
会在当前目录中创建环境。除非您打算出于某种原因在C:\Windows\system32
中创建虚拟环境,否则我会为环境使用不同的目录。
您不应该使用路径:使用activate
脚本(在<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”将在virtualenv中运行Python,而不是你的系统Python。 (尝试一下 - 做一个import sys; sys.prefix
,它应该打印你的环境的根。)
您可以激活一个新环境以在环境/项目之间切换,但是您需要指定activate
的整个路径,以便它知道要激活哪个环境。你不应该明确地混淆PATH或PYTHONPATH。
如果您使用Windows Powershell,那么您可以利用wrapper。在Linux上,virtualenvwrapper
(链接指向Powershell的端口)使virtualenv
的生活变得更加容易。
更新:完全不正确,但也许不完全符合virtualenv
的精神。您可以采取不同的策略:例如,如果您在virtualenv中安装Django以及您的站点需要的任何其他内容,那么您可以在您的项目目录(您正在开发您的站点的地方)中激活virtualenv。因为它已被激活,你的Python会发现Django以及你容易安装到虚拟环境中的任何其他东西:因为你在项目目录中工作,你的项目文件也会被Python看到。
进一步更新:您应该能够使用pip
,distribute
而不是setuptools
,而只需使用python setup.py install
的virtualenv
。只需确保在安装环境之前激活了环境。
是的,这基本上是virtualenv所做的,这就是activate
命令的用途,来自doc here:
激活脚本
在新创建的virtualenv中,将有一个bin / activate shell脚本或Windows上的Scripts / activate.bat批处理文件。
这会将$ PATH更改为指向virtualenv bin /目录。与workingenv不同,这就是它所做的一切;这是一个方便。但是如果你使用像/ path / to / env / bin / python script.py这样的完整路径,则不需要先激活环境。您必须使用源,因为它会就地更改环境。激活环境后,您可以使用取消激活功能撤消更改。
activate脚本还将修改shell提示符以指示当前活动的环境。
所以你应该使用activate
命令,它将为你做所有这些:
> \path\to\env\bin\activate.bat
在Windows上我安装了python 3.7并且仍然无法使用virtualenv
从Gitbash激活./Scripts/activate
,尽管它在Powershell中运行Set-ExecutionPolicy Unrestricted
并将设置更改为“Yes To All”后从Powershell开始工作。
我不喜欢Powershell,我喜欢使用Gitbash,所以要在Gitbash中激活virtualenv
,首先导航到你的项目文件夹,使用ls
列出文件夹的内容,并确保你看到“Scripts”。使用cd Scripts
将目录更改为“Scripts”,一旦进入“Scripts”路径,使用. activate
激活virtualenv
。不要忘记点后面的空格。
在我的项目wsgi.py文件中我有这个代码(它适用于virtualenv,django,windows和python 3.4中的apache2)
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()
在虚拟主机文件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>