Python virtualenv问题
我在Windows XP上使用VirtualEnv。 我想知道我的大脑是否正确缠绕它。
我运行了virtualenv ENV
并创build了C:\WINDOWS\system32\ENV
。 然后,我改变了我的PATH
variables,以包含C:\WINDOWS\system32\ENV\Scripts
而不是C:\Python27\Scripts
。 然后,我检出了Django到C:\WINDOWS\system32\ENV\Lib\site-packages\django-trunk
,更新了我的PYTHON_PATH
variables以指向新的Django目录,并继续easy_install
其他东西(这当然进入我的新的C:\WINDOWS\system32\ENV\Lib\site-packages
目录)。
我明白为什么我应该使用VirtualEnv,所以我可以在同一台机器上运行多个版本的Django和其他库,但这是否意味着要切换环境之间,我必须基本上改变我的PATH
和PYTHON_PATH
variables? 所以,我开发一个Django项目,在一个名为ENV
的环境中使用Django 1.2,然后改变我的PATH
,这样我就可以使用一个叫做ENV2
的环境,它具有Django的开发版本。
是基本上,还是有更好的方法来自动做这一切(我可以更新我的Python代码的path,但是这将需要我在我的应用程序中编写机器特定的代码)?
另外,这个过程与在Linux上使用VirtualEnv相比如何(我是Linux的初学者)。
通常virtualenv
在当前目录中创build环境。 除非您打算在某些原因C:\Windows\system32
在C:\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看到。
进一步更新:你应该能够使用pip
, distribute
而不是setuptools
,只是简单的python setup.py install
与virtualenv
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>