Slide 1

Slide 1 text

Никита Соболев github.com/sobolevn

Slide 2

Slide 2 text

Repeatable Software Development Process https://wemake.services/meta/

Slide 3

Slide 3 text

We love our build as we love our processes Repeatable!

Slide 4

Slide 4 text

Окунемся в историю. Почему все плохо?

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

» curl https://pypi.python.org/packages/af/ d5/815e4cece12e71b116ac140f03084f9178ff08dd5427 59f67c9c8b3ed784/mimesis-2.0.0.tar.gz \#md5\=86b09d6e552731cd92c71b752344e5b6 | tar xzf - » python mimesis-2.0.0/setup.py install

Slide 7

Slide 7 text

easy_install requests

Slide 8

Slide 8 text

hard_uninstall requests

Slide 9

Slide 9 text

virtualenv -p py2 .venv python3 -m venv .venv

Slide 10

Slide 10 text

pip ==

Slide 11

Slide 11 text

Какие зависимости установятся и каких версий? » pip install 'Werkzeug==0.5.1' » pip install 'flask==0.12.2'

Slide 12

Slide 12 text

pip freeze > requirements.txt

Slide 13

Slide 13 text

• Храним только "наши" зависимости • Легко читать человеку • Трудно понимать машине requirements.txt » cat requirements.txt flask==0.12.2

Slide 14

Slide 14 text

• Храним все транзитивные зависимости • Трудно читать человеку • Легче понимать машине, но все еще сложно requirements.txt » cat requirements.txt click==6.7 flask==0.12.2 itsdangerous==0.24 Jinja2==2.10 MarkupSafe==1.0 Werkzeug==0.14.1

Slide 15

Slide 15 text

Найди ошибку в requirements.txt docker==3.1.1 requests==2.18.0

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

pip-tools to the rescue!

Slide 18

Slide 18 text

Так где же ошибка? docker==3.1.1 requests==2.18.0

Slide 19

Slide 19 text

requirements.in -> requirements.txt

Slide 20

Slide 20 text

» pip-compile Could not find a version that matches requests !=2.18.0, ==2.18.0, >=2.14.2 Tried: 0.2.0, 0.2.1, 0.2.2, ... 2.18.3, 2.18.4, 2.18.4 There are incompatible versions in the resolved dependencies.

Slide 21

Slide 21 text

certifi==2018.1.18 # via requests chardet==3.0.4 # via requests docker-pycreds==0.2.2 # via docker docker==3.1.1 idna==2.6 # via requests requests==2.18.4 six==1.11.0 # via docker, six urllib3==1.22 # via requests websocket-client==0.47.0 # via docker requirements.txt

Slide 22

Slide 22 text

Продолжаем искать ошибки appnope==0.1.0 enum34==1.1.6

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Pipfile Pipfile.lock

Slide 25

Slide 25 text

» cat Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [packages] appnope = { os_name = "=='macos'" } enum34 = { markers = "python_version < '3.4'" } [dev-packages] pytest = "*" [requires] python_version = "3.6"

Slide 26

Slide 26 text

pipenv • Pipfile / Pipfile.lock уже сегодня • Deterministic builds • Управляет virtualenv • Проверяет безопасность зависимостей

Slide 27

Slide 27 text

Проблемы остаются • Проект еще в стадии активного развития • Внутри творится просто дичь • Бинарные зависимости; psycopg2 и psycopg2- binary • Нет интеграции с setuptools • Постоянные merge-конфликты • Специфичное комьюнити

Slide 28

Slide 28 text

History.txt 11.7.2: Bugfixes. 11.7.1: Windows bugfix. 11.7.0:Improvements to lockfile generation with private indexes. 11.6.9: Bugfixes. 11.6.8: Fix a Windows bug. 11.6.7: Fix a Windows bug.

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Полезные ссылки • Официальный Slack канал #pipenv: pythondev.slack.com • Pipfile specs: github.com/pypa/pipfile • Обновленный PyPI: pypi.org • Mimesis: github.com/lk-geimfari/mimesis • Шаблон с Django, Docker, Pipenv: github.com/ wemake-services/wemake-django-template

Slide 32

Slide 32 text

Вопросы? github.com/sobolevn