当前位置: 首页 > 面试题库 >

为什么django 2在python 2下可用?

丁淇
2023-03-14
问题内容

根据Django 2.0发行说明,
Django 2.0及更高版本将仅支持python 3,从而使1.11.X成为支持python 2的最后一个发行系列。

请参阅发行说明页面中的报价:

Django 2.0支持Python 3.4、3.5和3.6。我们强烈建议并仅正式支持每个系列的最新版本。

Django 1.11.x系列是最后一个支持Python 2.7的系列。

但是,在运行时pip2 install Django,将安装django版本2(然后失败,因为它假定功能在python 2中不可用):

(venv-crap) mbp15:server nir$ pip2 install django
Collecting django
  Downloading Django-2.0.tar.gz (8.0MB)
    100% |████████████████████████████████| 8.0MB 177kB/s 
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/PATH/django/setup.py", line 32, in <module>
        version = __import__('django').get_version()
      File "django/__init__.py", line 1, in <module>
        from django.utils.version import get_version
      File "django/utils/version.py", line 61, in <module>
        @functools.lru_cache()
    AttributeError: 'module' object has no attribute 'lru_cache'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/PATH/django/

我知道我可以手动指定2以下的要求版本,使pip安装对python
2有效的版本,但是如果我要同时支持python2和python3,这会使安装过程复杂化,并且假设pip会知道仅安装兼容版本与它从运行的Python。

因此,我的问题如下:

  1. 为什么pip尝试使用python2安装Django2,而不是自动选择最新的兼容版本?那不是pip功能的一部分吗?
  2. 有没有一种方法可以使从python2运行和与python3运行时requirements.txt安装的单个安装?Django<2.0``Django>=2.0

问题答案:

为什么pip尝试使用python2安装Django2,而不是自动选择最新的兼容版本?这不是点子功能的一部分吗?

正如[lasdair在评论中已经指出的那样,这是Django中的一个已知错误:bug#28878。

有没有一种方法可以创建一个requirements.txt文件,从python2运行时将安装Django
<2.0,而在python3运行时将安装Django> = 2.0?

您可以使用环境标记(请参阅PEP 508):

# requirements.txt
django>=1.11,<2.0; python_version<"3.4"
django>=2.0; python_version>="3.4"

这将安装一个,并跳过另一个Django依赖项,具体取决于您使用的是什么python:

$ pip2.7 install -r requirements.txt 
Ignoring django: markers 'python_version >= "3.4"' don't match your environment
Collecting django<2.0 (from -r requirements.txt (line 1))
  Downloading Django-1.11.8-py2.py3-none-any.whl (6.9MB)
...

$ pip3.6 install -r requirements.txt 
Ignoring django: markers 'python_version < "3.4"' don't match your environment
Collecting django>=2.0 (from -r requirements.txt (line 2))
  Using cached Django-2.0-py3-none-any.whl
...


 类似资料:
  • 本文向大家介绍请解释一下String为什么不可变?相关面试题,主要包含被问及请解释一下String为什么不可变?时的应答技巧和注意事项,需要的朋友参考一下 考察点:面向对象 不可变对象是指一个对象的状态在对象被创建之后就不再变化。不可改变的意思就是说:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。 String 不可变

  • 问题内容: 我是使用python编程的新手,但我尝试使用分隔符并结束打印,但仍给我语法错误。 我正在使用python 2.7。 这是我的代码: 这是错误: 问题答案: 首先,必须是脚本中的第一行代码(除了下面提到的一些例外)。第二,正如其他答案所说,您现在必须用作函数。这就是重点;将 功能 从Python 3带入Python 2.6+。 语句必须位于文件的顶部,因为它们会更改语言的基本内容,因此编

  • Vlad关于如何修复MultipleBagsException的示例将是我们的起点:如何修复MultipleBagsException-Vlad Mihalcea EntityManager的定义如下: 那么,为什么我们需要启动事务以便启用PersistenceContext,即使我们将其设置为使用扩展上下文呢?

  • 问题内容: 说我有一个清单。在什么情况下被称为? 我基本上理解了文档,但是我也想看到一个示例来毫无疑问地阐明其用法。 问题答案: 当Python尝试将两个对象相乘时,它首先尝试调用左侧对象的方法。如果左对象没有方法(或者该方法返回,表明它不适用于所讨论的右操作数),则Python希望知道右对象是否可以进行乘法。如果右操作数与左操作数的类型相同,Python就会知道它不能,因为如果左对象不能做到这一

  • 我正在使用react路由器dom(v4.3.1)构建react应用程序(v16.4.2)。在我定义一个链接并传递状态作为该链接的一部分之后,该信息仅在上下文中可用,而在道具中不可用。发生了什么事?如何在上下文中访问信息?或者将路线信息移动到道具? Index.JS App.JS } } 我要传递的代码: 反应工具视图:

  • 官方教程 集群 性能优化 等等等...