Все функции setup.py
, tox
, requirements
, virtualenv
и т. Д. Имеют решающее значение для того, кто распространяет библиотеку, которую необходимо собрать и протестировать для нескольких версий Python и, возможно, для нескольких версий их требования.
В документах упоминается это , но я повторюсь. Pipenv предназначен для разработчиков приложений и поставщиков услуг. В этих случаях вы обычно создаете одну конфигурацию и активно обновляете свой набор версий. Кроме того, вы должны иметь возможность легко выполнить откат к предыдущей версии.
То, что вы получили с requirements.txt
, было закреплением версии, так что вы могли откатиться назад, но pip никогда не навязывал согласованность версий, поэтому вы могли создать requirements.txt
, который имел противоречивые версии. Это python, так что большую часть времени вы можете обойтись без него, но наличие согласованных версий смягчает этот класс проблем.
pip-tools может создавать согласованные наборы версий, но теперь вы имеете дело с тремя отдельными утилитами: pip
, pip-tools
и virtualenv
. Это замечательно, если все всегда стараются запустить все три, чтобы держать вещи в курсе, и, конечно, они не делают.
То, что добавляет pipenv, объединяет управление всеми тремя из них и обеспечивает постоянную согласованность версий.
Если вы делаете что-то столь же простое, как git checkout
, все, что вам нужно сделать, это запустить pipenv sync --dev
, чтобы обновить свой virtualenv.
С помощью pip вам придется полностью уничтожить virtualenv и повторно запустить pip install
, так как pip не удалит существующие пакеты.
Если вы настроили свой Pip-файл на "yourpackage" = {path=".", editable=true}
, то вы можете обновить требование в setup.py
и pipenv update
, чтобы обеспечить соответствующее обновление вашего virtualenv или сообщить об ошибке.
Для ясности, нет ни одного варианта использования, который бы обрабатывался одним pipenv; Вы можете сделать это с другими инструментами. Но он имеет в виду аудиторию, разработчиков приложений, и отличается тем, что предоставляет пользователям гораздо более согласованный опыт. Я также обнаружил, что на практике это также полезно для разработки библиотек, поскольку набор тестов сам по себе является приложением.