Python virtualenv 问题

新手上路,请多包涵

我在 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 变量?所以,我从开发一个在名为 ENV 的环境中使用 Django 1.2 的 Django 项目开始,然后更改我的 PATH 这样我就可以使用一个名为 ENV2 的环境 --- 哪个有 Django 的开发版本?

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

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

原文由 orokusaki 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 446
2 个回答

通常 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 也可以看到您的项目文件。

Further update: You should be able to use pip , distribute instead of setuptools , and just plain python setup.py install with virtualenv .只需确保在将某些内容安装到其中之前已激活环境即可。

原文由 Vinay Sajip 发布,翻译遵循 CC BY-SA 3.0 许可协议

是的,基本上这就是 virtualenv 所做的,这就是 activate 命令的用途,来自 此处 的文档:

激活脚本

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

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

激活脚本还将修改您的 shell 提示符以指示当前处于活动状态的环境。

所以你应该只使用 activate 命令,它会为你做这一切:

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

原文由 mouad 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题