我在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和其他库,但这是否意味着要在环境之间切换,我必须基本上更改我的PATHPYTHON_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指定整个路径,以便它知道要激活哪个环境.你永远不应该明确地弄乱路径或PYTHONPATH.

如果使用Windows Powershell,则可以利用wrapper.在Linux上,virtualenvwrapper(链接指向这个到Powershell的端口)使virtualenv的使用变得更加简单.

Update:完全正确,但可能不完全符合virtualenv的精神.你可以采取不同的策略:例如,如果你在virtualenv中安装Django和你的网站所需的任何其他东西,那么你可以在项目目录(你正在开发网站的地方)中工作,激活virtualenv.因为它被激活了,你的Python会找到Django和任何你可以轻松安装到虚拟环境中的东西:而且因为你在项目目录中工作,你的项目文件对Python也是可见的.

Further update:你应该能够使用pipdistribute而不是setuptools,只是简单的python setup.py installvirtualenv.在安装某个环境之前,请确保已激活该环境.

Linux相关问答推荐

创建守护进程时打开0,1,2描述符

从 ALSA USB 硬件设备获取 USB 设备文件路径

为什么 linux shell diff 命令有时会显示与空行相关的输出,即使存在 -B(--ignore-blank-lines)选项?

X86 程序集 - struct 点 - 存储/返回不正确?

在具有不同文件类型的文件夹中编辑多个 xml 文件 - 使用预定顺序

inotifywait 可以说文件在另一个进程可以访问之前已关闭吗?

从另一个文件中的大文件中查找行的最快方法

如何在 DolphinDB 中递归查找目录中的所有文件?

提交SLURM作业(job)时出现nohup问题

有没有办法定义自定义隐式 GNU Make 规则?

使用 Bash 获取特定文件的 mtime?

未找到框架.NETFramework,Version=v4.7.1的参考程序集

使用 shell 脚本获取 MAC 地址

如何使用完整路径或文件名显示 grep 结果

通过写入 /dev/input/mice 来控制鼠标

Linux中没有X.org的OpenGL

可以通过 SSH 连接的所有用户的列表

比较两个图像的 python/linux 方式

如何使用 bash 在文件中间添加一行文本?

Anaconda 安装后,conda 命令失败并显示ImportError: no module named conda.cli