2015-09-20 3 views
1

Я ищу лучшие практики, делаю и не хочу касаться спецификаций спецификации в файлах требований для pip в пакетах python.Требования к пакету Python: Использование спецификаторов версий == и> =

Предположим, что пакет python зависит от некоторых других модулей. Для большинства из них требуется минимальная версия. По крайней мере, для сопровождающих известно, что код работает с наименьшим, например, шесть 1,7

Теперь можно определить требования по-разному:

  • six>=1.7.0 Программное обеспечение было протестировано с этой версией, и предполагается, что он будет также с будущими версиями
  • six==1.7.0 Мы требуется точная версия, пакет был протестирован. Программное обеспечение не тестировалось со всеми будущими версиями модуля, поэтому мы не можем гарантировать, что он будет работать для них.
  • six==1.9.0 Мы просто тестируем его с использованием новейшей версии и требуем его.

У меня есть торможение, требующее точной версии, так как это может нарушить другие требования к пакетам и кажется мне плохой практикой. С другой стороны, пакет не был протестирован со всеми версиями шести выше 1.7.0.

Существуют ли какие-либо указания относительно требований к версии пакета и использования == против >=?

+0

содержит обе версии: один указывает минимальные требования '> =' и содержит только прямые зависимости (рукописные), другой использует точные проверенные версии для всех сторонних пакетов, которые генерируются автоматически ('pip-compile') – jfs

+0

Поэтому я должен порекомендовать установить точные версии, если это возможно, и дополнительно требовать минимальные версии? Рекомендуемые точные версии могут быть помещены в файл требований для 'pip -r'. Но как справиться с минимальными требованиями, поместите его в setuptools 'install_requires'? – sebix

+1

В разных вариантах использования могут потребоваться различные решения; это не «ни или»: используйте точные версии для себя, чтобы обеспечить воспроизводимую среду. Вы не можете контролировать, какие версии могут быть доступны в других средах, - не устанавливайте никаких ограничений, если вы не должны (то есть, если вы знаете, что это не работает до конкретной версии), например, поставите себя на место для поддержки дистрибутива: может быть полезно узнать (например, посетив сайт CI), какие точные версии будут проверены 1.9.0, но лучше, если ваш пакет поддерживает текущие/будущие стабильные версии, т. е. 'six> = 1.7' это нормально. – jfs

ответ

1

Основываясь на моем опыте, как разработчик, упаковщик (пакет сопровождающие для распределений) и программного обеспечение сопровождающего я пришел к следующей интерпретации/рекомендации:

  • install_requires: Зависимость, приведенная в install_requires проверяется во время выполнения (!) pkg_resources. Это жесткие зависимости. Они могут (должны?) Содержать требуемый минимальный номер версии, но не точную версию, если не указаны очень веские причины. Более поддерживаемые версии, как правило, более полезны, максимальные номера версий обычно являются кошмаром.
  • extras_requires содержит дополнительные требования (рекомендации), которые не нужны для основных функций, но для некоторых дополнительных функций или являются дополнительными, что повышает функциональность. Если программное обеспечение не работает без него, оно должно перейти к install_requires.
  • requirements.txt Некоторые сопровождающие устанавливают его одинаково с install_requires, некоторые другие вообще не используют его. Его можно использовать для рекомендации конкретных версий требований, которые лучше всего тестируются. Это, конечно, вообще не полезно для упаковки, но для настроек в virtualenvs и подобных.

Упаковщики обычно не используют информацию из требования .txt, но из install_requires и extras_requires.

Смежные вопросы