Как используются Pipfile и Pipfile.lock?

133

Похоже, что Pipfile / Pipfile.lock предназначены для замены файла requirements.txt в контексте упаковки Python. Однако документации о том, как они на самом деле работают, не так много. Я нашел развивающееся описание pipfile на участке PyPi сайта Python здесь , но это довольно грязно и не объясняет семантику различных секций файла.

Какие-нибудь указания о том, как понимать эти файлы?

Стивен
источник
2
Это прямой аналог мира Ruby Gemfileи Gemfile.lockиз мира Ruby: .lockфайл имеет определенные версии для каждой зависимости; тот, у которого нет этого расширения, имеет только версии, известные контролирующим людям. Тем не менее, просить объяснения того, что все еще развивается и еще далек от того, чтобы быть четко определенным, гораздо менее стандартизированным, возможно, немного преждевременно.
Чарльз Даффи,
(И аналогично, разница между Pipfileи requirements.txtв основном заключается в том, что первый пытается перенять функции из мира Ruby, то есть возможность указывать наборы зависимостей для нескольких сред и с условиями / параметрами / и т. Д. В одном файле).
Чарльз Даффи,
1
Похоже, что он уже был развернут в репозитории Heroku "Начало работы с Python" ( github.com/heroku/python-getting-started.git ), так что нравится вам это или нет, но похоже, что он создан.
Стивен
Попался. Тем не менее, документы мне кажутся довольно солидными. Я не знаю, что я мог бы написать в ответе, который бы не повторял их.
Чарльз Даффи,
1
Если вы имеете в виду ссылку, которую я сделал в OP, то здесь пропущен ряд вещей, например, что на самом деле означает, что что-то находится в разделе с именем source.
Стивен

Ответы:

167

Концепция этих файлов проста и аналогична другим уже существующим инструментам, если вы знакомы с Ruby Bundler или Node Npm. Pipenv- это инструмент управления пакетами и виртуальной средой, который использует файлы Pipfile и Pipfile.lock для достижения этих целей.

Pipenv обрабатывает виртуальную среду одним стандартным способом по умолчанию (больше не требуется активировать и деактивировать). Ниже приведены некоторые основы для начала работы, подробнее см. На веб-сайте pipenv .

Начиная

Начать использовать pipenv очень просто, в типе папки вашего проекта ...

$ pipenv install

... и если у него уже есть requirements.txtфайл, он сгенерирует Pipfileфайл с требованиями и папку виртуальной среды, в противном случае он сгенерирует пустой Pipfileфайл. Если вам не понравилось что-то, что вы установили, или вы передумали, просто введите ...

$ pipenv uninstall <package>

... и все готово. Чтобы активировать виртуальную среду, уже созданную pipenv, воспользуйтесь ...

$ pipenv shell

... и ваша виртуальная среда будет активирована. Чтобы покинуть окружающую среду ...

$ exit

... и вы вернетесь к исходному сеансу терминала.

Pipfile

Pipfile файл предназначен для определения требований пакетов для вашего приложения на Python или библиотеки, как для разработки и исполнения. Вы можете установить пакет, просто используя ...

$ pipenv install flask

... и он будет добавлен как зависимость для развертывания и выполнения или с помощью ...

$ pipenv install --dev pytest

... и он будет использоваться как зависимость для времени разработки. Синтаксис файла довольно прост, он выглядит следующим образом.

[[source]] # Here goes your package sources (where you are downloading your packages from).
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages] # Here goes your package requirements for running the application and its versions (which packages you will use when running the application).
requests = "*"
flask = "*"
pandas = "*"

[dev-packages] # Here goes your package requirements for developing the application and its versions (which packaes you will use when developing the application)
pylint = "*"
wheel = "*"

[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

Pipfile.lock предназначен для указания, на основе настоящее пакетов в Pipfile , которые следуют использовать конкретный вариант тех, избегая риски автоматического обновления пакетов , которые зависят друг от друга и разорвать ваше дерево зависимостей проекта.

Вы можете заблокировать установленные в данный момент пакеты с помощью ...

$ pipenv lock

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

danieldeveloper001
источник
Это интересный ответ, но я думаю, что когда я спросил, я не совсем понял, что на самом деле имеется в виду [[source]], например, это источник для пакетов, которые загружаются pipenv или чем-то еще? Думаю, остальные два файла достаточно очевидны.
Стивен
1
Признаюсь, меня это сбивало с толку, потому что я работаю над учебником, в котором мне нужно решить, важна ли разница [package] / [dev-package], или я должен просто поместить все в [package]. (Поиск в Google - вот что привело меня к этой странице.) Но наличие и того, и другого при размещении материала разработчика в [package] как бы сбило меня с толку. Я мог понять, почему запросы должны быть в [пакете].
Al Sweigart
1
Изменено в соответствии с просьбой, чтобы избежать путаницы с пакетами разработки, спасибо за ваш комментарий, надеюсь, теперь это не так запутанно :)
danieldeveloper001
1
Я думаю, что это хорошая идея, если вы хотите отслеживать версии своих пакетов в процессе эволюции исходного кода, так как большинство пакетов будут помечены звездочкой Pipfile. Если что-то сломается при обновлении пакета, вы сможете исправить это, просмотрев историю версий пакета, и действительно, один из создателей библиотеки запросов действительно рекомендует сделать это здесь .
danieldeveloper001
1
@Stephen, на самом деле все наоборот, как указано в документации по установке pipenv, вы можете указать --skip-lockфлаг, чтобы заставить его игнорировать Pipfile.lockфайл, а не заставлять его использовать его;)
danieldeveloper001