如何在虚拟环境中强制更新Django版本?

4 投票
4 回答
4343 浏览
提问于 2025-04-17 10:26

我想在一个新的虚拟环境中安装1.3.1版本的Django。我的系统上已经安装了Django的1.3.0版本。我用no-site-packages创建了虚拟环境,并尝试重新安装Django,结果却没有成功:

$ virtualenv --no-site-packages pyenv
New python executable in pyenv/bin/python
Installing setuptools............done.
Installing pip...............done.
$ source pyenv/bin/activate
(pyenv)$ python
Python 2.6.6 (r266:84292, May 26 2011, 21:27:16) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 3, 0, 'final', 0)

好吧,尽管我没有安装Django,并且使用了no-site-packages,这个虚拟环境还是 somehow 识别到了系统上的版本。

现在我想用1.3.1版本来覆盖它:

(pyenv)$ pip install django==1.3.1
Downloading/unpacking django==1.3.1
  Downloading Django-1.3.1.tar.gz (6.5Mb): 6.5Mb downloaded
  Running setup.py egg_info for package django
Installing collected packages: django
  Found existing installation: Django 1.3
    Not uninstalling Django at /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages, outside environment /Users/anna/Dropbox/code-local/pyenv/pyenv/bin/..
  Running setup.py install for django
    changing mode of build/scripts-2.6/django-admin.py from 644 to 755
    changing mode of /Users/anna/Dropbox/code-local/pyenv/pyenv/bin/django-admin.py to 755
Successfully installed django
Cleaning up...
(pyenv)$ python
Python 2.6.6 (r266:84292, May 26 2011, 21:27:16) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION

但是这也没成功,它还是指向1.3.0!

注意这一行:Found existing installation: Django 1.3 Not uninstalling Django

我该如何强制我的虚拟环境使用1.3.1版本?我需要编辑我的本地Python路径吗?

我很困惑,为什么虚拟环境能看到系统上的Django,明明我已经明确使用no-site-packages安装了。这是正常的吗?

4 个回答

1

我觉得与其强制使用django 1.3.1,不如先退一步,看看可能出现问题的原因:

  • 虚拟环境中的 site-packages 目录里有什么内容?
  • 被导入的django版本的 django.__file__ 的值是什么?
  • site.py 中有没有什么自定义设置,或者你是否在使用用户站点目录?

顺便说一下,我用同样的命令加上 --no-site-packages 选项时,无法导入系统范围内安装的django版本。

2

你可以使用 -U 这个选项来升级软件。

比如,你可以这样输入命令来安装或升级 Django 到 1.3.1 版本:

pip install -U django==1.3.1

4

在你使用 --no-site-packages 创建并激活虚拟环境之后,应该是无法访问到 django 这个包的。我猜想你可能以某种方式修改了 PYTHONPATH,让它可以访问到这个包。你可以用 echo $PYTHONPATH 来查看一下(我的是空字符串)。试着运行 pip freeze,看看结果是什么样的:

 $> virtualenv --no-site-packages testenv 
 New python executable in testenv/bin/python2.7
 Also creating executable in testenv/bin/python
 Installing setuptools............done.
 Installing pip...............done.
 $> source testenv/bin/activate
 (testenv)$> pip freeze
 wsgiref==0.1.2

撰写回答