【问题标题】:How do I force a new version of Django in a virtualenv?如何在 virtualenv 中强制使用新版本的 Django?
【发布时间】:2012-02-12 10:55:21
【问题描述】:

我想在一个新的 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 路径吗?

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

【问题讨论】:

  • 尝试使用-I 告诉 pip 忽略已安装的软件包。您可能还想使用 -E /path/to/env 为您的 virtualenv 指定目录
  • 试试这个解决方案:stackoverflow.com/questions/5569895/…

标签: python django virtualenv pip


【解决方案1】:

使用--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

【讨论】:

    【解决方案2】:

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

    pip install -U django==1.3.1

    【讨论】:

    • 不,只是运行它,仍然得到Found existing installation: Django 1.3 Not uninstalling Django>>> django.VERSION (1, 3, 0, 'final', 0)
    • pip install -U django 应该足够了,因为它会自动提取最新的。不过,不知道为什么它不会按原样工作。你也可以试试pip install -I django,它会忽略已安装的包。
    【解决方案3】:

    我认为与其强制 django 1.3.1,不如退后一步,调查可能出错的原因:

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

    值得一提的是,我使用带有 --no-site-packages 选项的相同命令,但无法导入系统范围内安装的 django 版本。

    【讨论】:

      【解决方案4】:

      我的 virtualenv 也有同样的情况。我通过以下步骤解决了我的问题:

      打开外壳并输入:

      python
      
      import django
      
      django.__path__
      

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

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

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

      最后,安装 Django 1.3.1

      【讨论】:

        猜你喜欢
        • 2020-02-16
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        • 2021-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多