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

Comparison of Packaging Tools in 2023 (PyCon TW...

Peacock
September 02, 2023

Comparison of Packaging Tools in 2023 (PyCon TW 2023)

Peacock

September 02, 2023
Tweet

More Decks by Peacock

Other Decks in Programming

Transcript

  1. Backgrounds and Motivations There are so many packaging tools in

    Python Around these tools are changing dramatically Adopted several big PEPs; 517, 621, and 660 pyproject.toml format was defined 4 / 33
  2. Target Audiences of this Talk Struggling with choosing packaging tools:

    for 3 types of Pythonistas: Library Developer Application Developer Automation / Scripting Developer
  3. Table of Contents 1. Introduction 1. Background, Motivations, Target Audiences

    of this Talk 2. List of Packaging tools to compare in this Talk 3. Self-Introduction 2. Pros / Cons for each tool 1. Pipenv, Poetry, PDM, pip-tools, Hatch, pip (with venv) 3. What is the best tool? (for Library / Application / Scripting Developers) 4. Appendix: Rye
  4. Basic Information Name Author First Release License Pipenv Kenneth Reitz

    2018/06 2018.6.25 MIT Poetry Sébastien Eustace 2018/03 0.2.0 MIT PDM Frost Ming 2020/01 0.0.1 MIT pip-tools Vincent Driessen 2017/04 1.8.2 BSD 3-Clause Hatch Ofek Lev 2021/12 Hatch v1rc2 MIT pip PyPA 2008/12 (First GitHub commit) MIT
  5. Self-Introduction Name: Peacock / Yoichi Takai Social media names: peacock0803sz

    23 Years Old, 5+ Years of Python Ex Work: TOPGATE, Inc. Vice-Chair of PyCon APAC 2023 Likes: Listening to Music / Cameras / Audios / Drinking 9 / 33
  6. PEP 621 style pyproject.toml ref: https://peps.python.org/pep-0621/ 1 [build-system] 2 requires

    = ["setuptools>=45","wheel"] 3 4 [project] 5 name = "my-awesome-package" 6 readme = "README.md" 7 license = {file = "LICENSE"} 8 authors = [{name = "Peacock", email = "[email protected]"}] 9 version = "0.1.0" 10 requires-python = ">=3.10" 11 dependencies = ["SQLAlchemy", "FastAPI"] # list dependencies here 12 13 [project.optional-dependencies] 14 dev = ["black", "flake8", "mypy"] # list dev-dependencies here 11 / 33
  7. Pipenv: Pros Supporting lock-file Easy to add/upgrade packages Wraps virtualenv

    Pipenv: Cons Slow dependency resolver LIMITED support PEP 621 style pyproject.toml 14 / 33
  8. Poetry: Pros Dependency management with lock-file Wraps virtualenv Included Task-runner

    ( poetry run ) Helper for the building wheels Poetry: Cons NOT support PEP 621 style pyproject.toml 16 / 33
  9. PDM: Pros Fast dependency resolver But you can choose another

    resolver Support PEP 621 style pyproject.toml Included Task-runner ( pdm run ) PDM: Cons not Included helper for the building wheels 18 / 33
  10. pip-tools: Pros Simple to use, only 2 commands Support PEP

    621 style pyproject.toml dependency Combine-able with pip or hatch Maintained by the Jazzband community pipe-tools: Cons not Included Task-runner, wheel builder and package publisher 20 / 33
  11. Hatch: Pros Configurable to a back-end for building project Maintained

    actively by PyPA, nearly official Works with pyproject.toml spec, PEP 621 style Hatch: Cons Not included dependency updater Not supporting lock-file 22 / 33
  12. pip: Pros Build-in in Python, very simple Works with pyproject.toml

    spec, PEP 621 style pip: Cons Without wraps virtualenv Not supporting file-managed dependency Not included task-runner and wheel builder 24 / 33
  13. Case 1: Library Developing -> Hatch (with pip-tools): Very configurable

    and flexible Grounds Almost what you need is included ex: Task-runner, wheel builder and publisher Maintained actively by PyPA Works with pyproject.toml spec, PEP 621 style 26 / 33
  14. Case 2: Application Developing -> PDM: All-in-one tool and easy

    to use Grounds Fast dependency resolver Support PEP 621 style pyproject.toml Included Task-runner ( pdm run ) 27 / 33
  15. Case 3: Automation Script Developing -> pip: Simply to use,

    Non-dependency (built-in in Python) Grounds Lightweight, Non-dependency to install itself Simple to use, There are many know-hows and examples 28 / 33
  16. Rye: Pros/Cons Pros Single-binary, easy to install and use Works

    with pyproject.toml spec, PEP 621 style Wraps virtualenv, Including Package Builder and Publisher Included Python version manager Cons EXPERIMENTAL, not stable 30 / 33
  17. Notes: References URLs PEP 517 – A build-system independent format

    for source trees PEP 621 – Storing project metadata in pyproject.toml PEP 660 – Editable installs for pyproject.toml based builds (wheel based) Official Doc for the setuptools by PyPA python-poetry/poetry: Use the [project] section in pyproject.toml according to PEP-621 #3332 python-poetry/poetry: Add support for pyproject.toml files when adding --editable projects … #7670 My Blog article (in Japanese): Isn’t venv + pip good for Python package management? in 2023/1 Are you using the -c/–constraint option of pip install?