Это установит одну и пропустит другую зависимость django, в зависимости от того, какой питон вы используете:

сно сПримечания к выпуску 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 установит только совместимые версии с питоном, с которого он бежит.

Поэтому мои вопросы таковы:

Почему pip пытается установить Django2 с python2 вместо автоматического выбора последней совместимой версии? Разве это не частьpipвозможности?Есть ли способ сделать синглrequirements.txt это установитDjango<2.0 при запуске из python2 иDjango>=2.0 когда работает с python3?
 Alasdair04 дек. 2017 г., 22:05
По первому вопросу смотритебилет 28878

Ответы на вопрос(1)

Решение Вопроса

о выбора последней совместимой версии? Разве это не часть возможностей пипсов?

КакАлэсдэйр уже отмечалось в комментариях, это известная ошибка в Django:ошибка № 28878.

Есть ли способ создать отдельный файл require.txt, который установит Django <2.0 при запуске из python2 и Django> = 2.0 при работе с python3?

Вы можете использовать маркеры среды (см.ОПТОСОЗ 508):

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

Это установит одну и пропустит другую зависимость django, в зависимости от того, какой питон вы используете:

$ 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
...

Ваш ответ на вопрос