Python虚拟环境问题
我在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
变量?比如说,我在一个叫 ENV
的环境中开发一个使用Django 1.2的项目,然后我又得改 PATH
之类的,才能使用一个叫 ENV2
的环境,这个环境里有Django的开发版本?
这就是全部吗,还是有更好的方法可以自动完成这些操作(我可以在Python代码中更新我的路径,但那样就需要在我的应用中写机器特定的代码)?
另外,这个过程和在Linux上使用VirtualEnv有什么不同(我对Linux还很陌生)?
6 个回答
在Windows上,我安装了Python 3.7,但在Gitbash中还是无法通过./Scripts/activate
来激活virtualenv
,虽然在Powershell中可以成功激活,这需要先在Powershell中运行Set-ExecutionPolicy Unrestricted
,并把设置改成“是对所有”。
我不喜欢使用Powershell,更喜欢Gitbash,所以在Gitbash中激活virtualenv
时,首先要进入你的项目文件夹,使用ls
命令来查看文件夹里的内容,确保能看到“Scripts”这个文件夹。然后用cd Scripts
命令切换到“Scripts”文件夹。一旦进入“Scripts”路径,就可以使用. activate
来激活virtualenv
。记得在点号后面留一个空格哦。
没错,基本上这就是虚拟环境(virtualenv)的作用,而 activate
命令就是为了这个目的。根据文档的说明,
激活脚本
在新创建的虚拟环境中,会有一个 bin/activate 的脚本,或者在 Windows 上会有一个 Scripts/activate.bat 的批处理文件。
这个脚本会改变你的 $PATH,让它指向虚拟环境的 bin/ 目录。和工作环境(workingenv)不同,这个脚本的功能就是这么简单;它只是为了方便你使用。但是,如果你直接使用完整路径,比如 /path/to/env/bin/python script.py,你就不需要先激活环境。你需要使用 source 命令,因为它会直接在当前环境中做修改。激活环境后,你可以使用 deactivate 函数来撤销这些修改。
激活脚本还会修改你的命令行提示符,以显示当前激活的是哪个环境。
所以你只需要使用 activate
命令,它会为你完成所有这些操作:
> \path\to\env\bin\activate.bat
通常情况下,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”会运行虚拟环境里的 Python,而不是你系统里的 Python。(你可以试试——输入 import sys; sys.prefix
,它应该会打印出你环境的根目录。)
你可以通过激活一个新的环境来在不同的环境或项目之间切换,但你需要为 activate
指定完整路径,这样它才能知道要激活哪个环境。你不需要手动去调整 PATH 或 PYTHONPATH。
如果你使用 Windows Powershell,可以利用一个 工具。在 Linux 上,virtualenvwrapper
(这个链接指向它在 Powershell 上的版本)让使用 virtualenv
变得更加简单。
更新:这并不是完全错误,但可能不太符合 virtualenv
的本意。你可以换个方式:例如,如果你在虚拟环境中安装 Django 和其他你网站需要的东西,那么你可以在项目目录(你开发网站的地方)激活虚拟环境进行工作。因为环境已经激活,你的 Python 就能找到 Django 和其他你通过 easy_install 安装的东西;而且因为你在项目目录工作,Python 也能看到你的项目文件。
进一步更新:你应该可以在 virtualenv
中使用 pip
、distribute
代替 setuptools
,以及直接使用 python setup.py install
。只要确保在安装东西之前已经激活了环境即可。