Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Игорь Шевченко. Управление зависимостями в Pyth...

Игорь Шевченко. Управление зависимостями в Python в 2017

Систему управления зависимостями в Python часто критикуют из-за наличия проблем, уже решенных в других языках. К счастью, в последние годы ситуация стала улучшаться. В своем докладе я расскажу о сложностях, возникающих при использовании pip, и покажу, как новые инструменты (Pipfile, Pipenv) делают установку пакетов надежнее и удобнее

Python Community Chelyabinsk

October 21, 2017
Tweet

More Decks by Python Community Chelyabinsk

Other Decks in Programming

Transcript

  1. pip

  2. pip

  3. Pipfile: формат файла [[source]] url = 'https://pypi.python.org/simple' verify_ssl = true

    [requires] python_version = '3.6' [packages] requests = { extras = ['socks'] } Django = '>1.10' [dev-packages] pytest = '*'
  4. [[source]] url = 'https://pypi.python.org/simple' verify_ssl = true [requires] python_version =

    '3.6' [packages] requests = { extras = ['socks'] } Django = '>1.10' [dev-packages] pytest = '*'
  5. Pipfile: lock-файл { "_meta": { "hash": { "sha256": "73d81f4fbe42d1da158c5d4435d9...", },

    "requires": [ {"marker": "python_version", "specifier": "3.6"} ], "sources": [ {"url": "https://pypi.python.org/simple", "verify_ssl": true}, ] }, "default": [ {"name": "Django", "version": "1.10.3", "hash": "..."}, {"name": "requests", "version": "2.12.1", "hash": "..."}, {"name": "PySocks", "version": "1.5.6", "hash": "..."}, ], "development": [ {"name": "pytest", "version": "3.2.3", "hash": "..."}, ] }
  6. { "_meta": { "hash": { "sha256": "73d81f4fbe42d1da158c5d4435d9...", }, "requires": [

    {"marker": "python_version", "specifier": "3.6"} ], "sources": [ {"url": "https://pypi.python.org/simple", "verify_ssl": true}, ] }, "default": [ {"name": "Django", "version": "1.10.3", "hash": "..."}, {"name": "requests", "version": "2.12.1", "hash": "..."}, {"name": "PySocks", "version": "1.5.6", "hash": "..."}, ], "development": [ {"name": "pytest", "version": "3.2.3", "hash": "..."}, ] }
  7. Проблемы решены • Обновление файла ✔ • Глобальная установка пакетов

    ✔ • Фиксирование версий ✔ • Dev-зависимости ✔
  8. CRITICAL:pip.index:Could not find a version that satisfies the requirement idna==2.7

    pipenv: обнаружение конфликтов версий pipenv install Locking [dev-packages] dependencies… Locking [packages] dependencies… (from versions: 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 2.0 2.1, 2.2, 2.3, 2.4, 2.5, 2.6) Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies. You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation. $
  9. Проблемы решены • Обновление файла ✔ • Глобальная установка пакетов

    ✔ • Фиксирование версий ✔ • Dev-зависимости ✔ • Ад зависимостей ✔
  10. Проблемы решены • Обновление файла ✔ • Глобальная установка пакетов

    ✔ • Фиксирование версий ✔ • Dev-зависимости ✔ • Ад зависимостей ✔ • Тайпосквоттинг ✔
  11. os_name = "== 'windows'" Условная установка [[source]] url = "https://pypi.python.org/simple"

    verify_ssl = true [packages] requests = "*" pywinusb = {version = "*", }
  12. markers="""\ python_version < '2.7.9' or \ (python_version >= '3.0' and

    python_version < '3.4') \ """ Условная установка [packages] unittest2 = {version = ">=1.0,<3.0", }
  13. Еще фичи • Установка питона нужной версии через pyenv •

    Загрузка переменных среды из файла • Проверка стиля кода • Генерация requirements.txt из Pipfile • Работа без virtualenv • Визуализация дерева зависимостей • Обнаружение неиспользуемых зависимостей