Python virtualenv问题

问题描述 投票:48回答:4

我在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的初学者)。

python windows linux virtualenv
4个回答
91
投票

通常,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。只需确保在安装环境之前激活了环境。


6
投票

是的,这基本上是virtualenv所做的,这就是activate命令的用途,来自doc here

激活脚本

在新创建的virtualenv中,将有一个bin / activate shell脚本或Windows上的Scripts / activate.bat批处理文件。

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

activate脚本还将修改shell提示符以指示当前活动的环境。

所以你应该使用activate命令,它将为你做所有这些:

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

2
投票

在Windows上我安装了python 3.7并且仍然无法使用virtualenv从Gitbash激活./Scripts/activate,尽管它在Powershell中运行Set-ExecutionPolicy Unrestricted并将设置更改为“Yes To All”后从Powershell开始工作。

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


0
投票

在我的项目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>
© www.soinside.com 2019 - 2024. All rights reserved.