Справляемся с зависимостями в 2018-м: Pipenv

Николай Сасковец, инженер-программист, iTechArt

Справляемся с зависимостями в 2018-м
 

Справляемся с зависимостями в 2018-м: Pipenv

2018-11-13, Николай Сасковец, инженер-программист, iTechArt

Николай Сасковец

Инженер-программист

Pipenv = pip + env

Кто пользуется или использовал Pipenv?
🙋🏻‍♂️ 🙋🏼‍♀️

Кто пользуется или использовал Pip?
🙋🏼‍♂️ 🙋🏻‍♂️ 🙋🏼‍♀️ 🙋🏻‍♀️

🤖

Pipenv — инструмент, который привносит в python всё то лучшее, что есть в системах пакетирования для других языков

Что такое Pipenv на самом деле?

Инструмент для приложений, не библиотек, который может:

Управление окружениями

Работа внутри виртуального окружения

Возможные проблемы с virtualenv + Pipenv

Управление пакетами

Можно устанавливать пакеты:

pipenv install Flask

Можно удалять пакеты:

pipenv uninstall Flask

А ещё можно посмотреть граф зависимостей:

pipenv graph

Управление пакетами: pipenv graph

			flower==0.9.2
			  - babel [required: >=1.0, installed: 2.6.0]
			    - pytz [required: >=0a, installed: 2018.7]
			  - celery [required: >=3.1.0, installed: 4.2.1]
			    - billiard [required: >=3.5.0.2,<3.6.0, installed: 3.5.0.4]
			    - kombu [required: >=4.2.0,<5.0, installed: 4.2.1]
			      - amqp [required: >=2.1.4,<3.0, installed: 2.3.2]
			        - vine [required: >=1.1.3, installed: 1.1.4]
		

Управление пакетами: pipenv install

Два варианта.
  1. Указываем пакет, который нужно установить: pipenv install Flask
    • добавляет Flask в Pipfile
    • устанавливает Flask
    • обновляет Pipfile.lock
  2. Не указываем пакет: pipenv install
    • устанавливает всё из Pipfile
    • обновляет Pipfile.lock

Управление пакетами: Pipfile

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

Pipfile:

Управление пакетами: Pipfile, пример

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
django = "*"
celery = "*"
[dev-packages]
"flake8" = "*"
moto = "==1.3.4"
[requires]
python_version = "3.6"

        

Управление пакетами: Pipfile, пример 2

...
[packages]
elasticsearch-dsl = "<6.0.0,>=5.0.0"
elasticsearch = "<6.0.0,>=5.0.0"
...
api_client = {git =
	"ssh://git@gitlab.com/something/api-client.git",
	ref = "v1.0.2"}
...

        

Детерминированность: Pipfile.lock

Детерминированность: Pipfile.lock, что внутри?

Неужели всё так хорошо?

Не очень

Неужели всё так хорошо?

Неужели всё так хорошо?

Что, если не Pipenv?

pip-tools?

Your tool of choice these days should be Pipenv

poetry?

¯\_(ツ)_/¯

shurph      @

исправленный QR
shurph.github.io/talks/pipenv/
shurph.github.io/talks/pipenv/  by Mikalai Saskavets