Python virtualenv问题

我在Windows XP上使用VirtualEnv。 我想知道我的大脑是否正确缠绕它。

我运行了virtualenv ENV并创build了C:\WINDOWS\system32\ENV 。 然后,我改变了我的PATHvariables,以包含C:\WINDOWS\system32\ENV\Scripts而不是C:\Python27\Scripts 。 然后,我检出了Django到C:\WINDOWS\system32\ENV\Lib\site-packages\django-trunk ,更新了我的PYTHON_PATHvariables以指向新的Django目录,并继续easy_install其他东西(这当然进入我的新的C:\WINDOWS\system32\ENV\Lib\site-packages目录)。

我明白为什么我应该使用VirtualEnv,所以我可以在同一台机器上运行多个版本的Django和其他库,但这是否意味着要切换环境之间,我必须基本上改变我的PATHPYTHON_PATHvariables? 所以,我开发一个Django项目,在一个名为ENV的环境中使用Django 1.2,然后改变我的PATH ,这样我就可以使用一个叫做ENV2的环境,它具有Django的开发版本。

是基本上,还是有更好的方法来自动做这一切(我可以更新我的Python代码的path,但是这将需要我在我的应用程序中编写机器特定的代码)?

另外,这个过程与在Linux上使用VirtualEnv相比如何(我是Linux的初学者)。

通常virtualenv在当前目录中创build环境。 除非您打算在某些原因C:\Windows\system32C:\Windows\system32创build虚拟环境,否则我将为环境使用不同的目录。

您不应该混淆path:使用activate脚本(在<env>\Scripts )确保Python可执行文件和path是特定于环境的。 完成此操作后,命令提示符将更改以指示环境。 然后,您可以调用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的path – activate对你来说是这样的,所以激活时“Python”将在virtualenv中运行Python,而不是你的系统Python。 (试一下 – 做一个import sys; sys.prefix ,它应该打印你的环境的根目录。)

您可以激活一个新的环境来切换环境/项目,但是您需要指定activate的整个path,以便知道激活哪个环境。 你不应该需要明确地弄乱PATH或PYTHONPATH。

如果你使用Windows Powershell,那么你可以利用一个包装 。 在Linux上, virtualenvwrapper (链接指向Powershell的一个端口)使得使用virtualenv更加容易。

更新:完全不是不正确的,但也许不太符合virtualenv的精神。 你可以采取一些不同的方法:例如,如果你在你的virtualenv中安装了Django和其他你需要的东西,那么你可以在你的项目目录下(你在开发你的站点的地方)使用virtualenv来激活它。 因为它被激活了,所以你的Python会findDjango和其他任何你可以轻松地安装到虚拟环境中的东西,因为你正在工程目录中工作,所以你的工程文件也可以被Python看到。

进一步更新:你应该能够使用pipdistribute而不是setuptools ,只是简单的python setup.py installvirtualenv python setup.py install 。 只要确保在安装东西前已经激活了一个环境。

是的,基本上这就是virtualenv所做的,这就是activate命令的用途,从这里 doc:

激活脚本

在新创build的virtualenv中,将会有一个bin / activate shell脚本或Windows上的Scripts / activate.batbatch file。

这会改变你的$ PATH指向virtualenv bin /目录。 不像workingenv,这是它所做的一切; 这是一个方便。 但是,如果使用/ path / to / env / bin / python script.py这样的完整path,则不需要先激活环境。 你必须使用源代码,因为它就地改变了环境。 激活环境后,可以使用停用function来撤消更改。

激活脚本还将修改您的shell提示符,以指示哪个环境当前处于活动状态。

所以你应该使用activate命令,这将为你做的一切:

 > \path\to\env\bin\activate.bat 

在我的项目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>