在Windows上使用virtualenv:不覆盖已安装的软件包

4

我的当前设置是在Windows上使用Python 2.5 / Django 1.1.1。 我想在一些项目中开始使用Django 1.2,但不能将其用于所有项目,这就是我需要 virtualenv 的原因。 然而,我遇到了一个从未遇到过的问题,并且很难进行谷歌搜索:将Django 1.2安装到虚拟环境中对我没有任何影响。 如果我激活环境并执行以下操作:

  • python
  • import django
  • django.VERSION

我得到的结果是"1.1.1 Final"。 Django已安装在环境的site-packages目录中,根目录中的init文件显示它是1.2。 但是,即使我使用--no-site-packages标志创建环境,该环境仍会回退到1.1.1。 我做错了什么?


好的,我破坏事物的方式是特定于Windows的。或者至少当时我认为是这样的。 - Tom
我能说什么呢?不如把Windows移除,因为它不是特定平台。 :) - Piotr Dobrogost
2个回答

9
根据您在bitbucket上提交的错误,看起来您正在使用PYTHONPATH环境变量指向一个包含Django 1.1.1和其他一些包的目录。根据设计,无论何时激活虚拟环境,PYTHONPATH始终排在sys.path的最前面(因为PYTHONPATH在您的直接和立即控制之下,人们会用它进行本地覆盖)。
在这种情况下,如果您不想在激活该虚拟环境时使用PYTHONPATH,则需要自己处理;也许可以创建一个自定义批处理文件,既调用虚拟环境的activate.bat,又修改PYTHONPATH。

感谢你的帮助。我是个傻瓜。不知道为什么我的PYTHONPATH变量里有任何东西,但清除它确实有很大的作用。我想我以为PYTHONPATH是Python使用的唯一路径信息。 - Tom

2

以下是一些可以用来诊断这些问题的工具:

要查看django来自哪里,请打印 django.__file__。它会显示指示django在文件系统中位置的文件。

要查看Python将寻找包的所有位置,请打印 sys.path。这是一个目录列表。

要查看导入文件时的详细信息,以调试模式启动python,命令为 python -v,然后您将看到有关导入包所在位置的大量调试信息。


谢谢。查看sys.path,virtualenv文件夹在列表末尾。它们不应该在开头吗? - Tom
当我在Windows上使用virtualenv时,我首先得到virtualenv目录,然后是标准目录。你是否在使用activate.bat? - Ned Batchelder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接