Python virtualenv问题

2024-09-28 23:19:07 发布

您现在位置: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和其他库,但这是否意味着要在环境之间切换,我必须基本上更改我的PATHPYTHON_PATH变量?所以,我从开发一个Django项目开始,它在一个名为ENV的环境中使用Django 1.2,然后更改我的PATH,这样我就可以使用一个名为ENV2的环境,这个环境有Django的开发版本?

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

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


Tags: pathdjango版本目录env机器内容环境
3条回答

在Windows上,我安装了python 3.7,虽然在Powershell中运行Set-ExecutionPolicy Unrestricted并将设置更改为“全部是”后,它在Powershell中工作,但仍然无法使用./Scripts/activate从Gitbash激活virtualenv

我不喜欢Powershell,我喜欢使用Gitbash,所以要激活Gitbash中的virtualenv,首先导航到项目文件夹,使用ls列出文件夹的内容,并确保看到“脚本”。使用cd Scripts将目录更改为“脚本”,进入“脚本”路径后,使用. activate激活virtualenv。别忘了点后的空格。

是的,基本上这就是virtualenv所做的,这就是activate命令的作用,从文档here

activate script

In a newly created virtualenv there will be a bin/activate shell script, or a Scripts/activate.bat batch file on Windows.

This will change your $PATH to point to the virtualenv bin/ directory. Unlike workingenv, this is all it does; it's a convenience. But if you use the complete path like /path/to/env/bin/python script.py you do not need to activate the environment first. You have to use source because it changes the environment in-place. After activating an environment you can use the function deactivate to undo the changes.

The activate script will also modify your shell prompt to indicate which environment is currently active.

因此,您应该只使用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”时将在virtualenv中运行Python,而不是在系统Python中。(尝试一下-做一个import sys; sys.prefix,它应该会打印出您环境的根目录。)

您可以激活一个新的环境来在环境/项目之间切换,但是您需要为activate指定整个路径,以便它知道要激活哪个环境。您不应该显式地处理PATH或PYTHONPATH。

如果使用Windows Powershell,则可以利用wrapper。在Linux上,virtualenvwrapper(链接指向Powershell的端口)使使用virtualenv变得更加容易。

更新:不正确,确切地说,但可能不完全符合virtualenv的精神。您可以采用不同的策略:例如,如果您在virtualenv中安装了Django和站点所需的其他任何东西,那么您可以在项目目录(开发站点的位置)中激活virtualenv。因为它是激活的,所以Python会找到Django和其他任何您很容易安装到虚拟环境中的东西:并且因为您在项目目录中工作,所以Python也可以看到您的项目文件。

进一步更新:您应该能够使用pipdistribute而不是setuptools,只需使用python setup.py installvirtualenv。在安装某个环境之前,请确保已激活该环境。

相关问题 更多 >