Не удалось найти версию, удовлетворяющую требованию pytz

У меня проблема с установкой pytz в virtualenv.

Downloading/unpacking pytz
  Could not find a version that satisfies the requirement pytz (from versions: 2009r, 2008b, 2009f, 2008c, 2007g, 2011g, 2005m, 2011e, 2007f, 2011k, 2007k, 2006j, 2008h, 2008i, 2011e, 2008a, 2009e, 2006g, 2011j, 2010l, 2005m, 2008i, 2005k, 2008g, 2007c, 2007i, 2009l, 2009r, 2006j, 2011k, 2007d, 2006p, 2009i, 2009u, 2007i, 2009f, 2010g, 2008h, 2009a, 2007g, 2011e, 2006p, 2012b, 2010k, 2005r, 2007f, 2009l, 2009p, 2008c, 2009j, 2008g, 2010g, 2010h, 2011h, 2010k, 2007c, 2007d, 2011d, 2009l, 2011c, 2008a, 2005m, 2007k, 2009n, 2011d, 2010o, 2013b, 2012h, 2010e, 2012c, 2012d, 2012f, 2011n, 2011b, 2011j, 2008c, 2012j, 2007k, 2009f, 2009d, 2010e, 2010b, 2013b, 2011d, 2009p, 2008h, 2005r, 2009i, 2009n, 2009a, 2010k, 2008g, 2006g, 2008b, 2012c, 2009i, 2007g, 2012c, 2010h, 2011n, 2012g, 2007d, 2008a, 2009u, 2012g, 2010o, 2006p, 2010b, 2009u, 2012d, 2011k, 2012f, 2009a, 2007f, 2011h, 2010l, 2009j, 2011g, 2009g, 2009g, 2005r, 2011c, 2012g, 2009g, 2012d, 2009j, 2010o, 2007c, 2010g, 2006g, 2009d, 2010h, 2005k, 2006j, 2010b, 2009n, 2011g, 2011c, 2012b, 2009e, 2009d, 2011j, 2007i, 2012j, 2010l, 2009r, 2012h, 2010e, 2009p, 2008i, 2012f, 2009e, 2012b, 2011h, 2005k, 2008b, 2013b, 2011n, 2012j, 2004b)
Cleaning up...
No distributions matching the version for pytz

Кажется, что это проблема с последней версией pip.

Есть ли способ обхода?

Ответ 1

Эта ошибка возникает при установке pytz с помощью pip v1.4 или new из-за этого изменения в поведении:

Предварительные версии

Начиная с версии 1.4, по умолчанию только установит стабильные версии, указанные PEP426. Если версия не может быть проанализирована как совместимая версия PEP426, то предполагается, что она является предварительным выпуском.

Если спецификатор Требований включает в себя версию до релиза или разработки (например, >=0.0.dev0), то pip предоставит для этого требования версии для предварительного выпуска и разработки. Это не включает флаг !=.

Команда pip install также поддерживает флаг --pre, который будет включать установку предварительных выпусков и выпусков разработки.

Идентификаторы версии для пакета pytz имеют формат 2013b. PEP426 использует идентификаторы версий, описанные в PEP440, в котором указано, что

Имена открытых версий ДОЛЖНЫ соответствовать следующей схеме:

N[.N]+[{a|b|c|rc}N][.postN][.devN]

Поскольку версии pytz, такие как 2013b, не соответствуют этому формату, версия 1.4+ из pip обрабатывает все версии pytz как версии до выпуска и не устанавливает их по умолчанию.

Если вы устанавливаете pytz, вы можете использовать флаг --pre, чтобы избежать такого поведения, но вы не захотите использовать этот флаг для установки всех ваших требований к проекту: некоторые пакеты могут иметь нестабильный предварительный выпуск версий, которые вам не нужны. В этом случае используйте описанное выше поведение: если вы укажете номер версии "до выпуска" для пакета, то pip будет искать "предварительные версии" версии пакета. Поэтому я добавил это в свой requirements.txt:

pytz>=2013b

Когда я обновляю свои пакеты, pip теперь корректно будет искать и устанавливать последнюю версию pytz.

Это было зарегистрировано как issue # 1204837 в трекерах для отслеживания ошибок pytz и вопрос № 974 в отладчике ошибок пика.

Стоп Нажмите. Как описано в отчете Отчет об ошибках PyTz, номер версии pytz теперь изменен на, например, 2013.7 - поэтому, как только вы обновились до этого, проблема больше не должна возникать.