Пожалуйста, объясните использование Pipfile и Pipfile.lock

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

Любые указатели на то, как понимать эти файлы?

Ответ 1

Концепция этих файлов проста и аналогична другим уже существующим инструментам, если вы немного знакомы с 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, поэтому для краткости он здесь не будет отображаться.


Все еще есть сомнения? Дайте мне знать, чтобы я мог улучшить ответ, чтобы другие могли извлечь из него урок. Я уже перенес свои проекты в него, и я использую его ежедневно на работе, это того стоит;)