如何在virtualenv中强制使用新版本的Django?

时间:2012-01-17 16:16:09

标签: python django virtualenv pip

我想在一个新的virtualenv中安装Django的版本1.3.1 。我已经在系统范围内安装了Django 1.3.0版。我已经使用no-site-packages安装了virtualenv,并尝试按如下方式重新安装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,virtualenv仍然以某种方式选择了系统版本。

现在尝试用版本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

如何强制我的virtualenv使用1.3.1?我是否需要编辑本地Python路径?

我很困惑为什么virtualenv甚至可以在我明确安装no-site-packages时看到系统Django。这是它应该如何工作的吗?

4 个答案:

答案 0 :(得分:4)

使用--no-site-packages创建并激活virtualenv后,应该无法访问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

答案 1 :(得分:1)

您可以使用-U选项进行升级。

  

pip install -U django == 1.3.1

答案 2 :(得分:1)

我认为不应该强制执行django 1.3.1,而应该退后一步,调查可能出错的原因:

  • 虚拟环境中site-packages目录的内容是什么?
  • 正在导入的版本{/ 1}}的价值是什么
  • django.__file__中是否有任何自定义项,或者您使用的是用户站点目录?

值得一提的是,我使用了site.py选项的相同命令,我无法导入系统安装的django版本。

答案 3 :(得分:0)

我和virtualenv的情况相同。我用这个步骤解决了我的问题:

打开shell并输入:

python

import django

django.__path__

这将告诉你应该删除旧版django的路径。

转到该目录并使用root选项(我认为你需要这个来删除目录)和sudo并输入以下命令:

rm -r Django
rm -r Django-1.3.0.egg-info/

最后,安装Django 1.3.1