Slide 1

Slide 1 text

Comparison of Packaging Tools in 2023 Peacock (Yoichi Takai), at PyCon TW 2023 (2023/09/01)

Slide 2

Slide 2 text

Slides: slides.p3ac0ck.net/pycontw2023/index.html Feel Free to Take Pictures Hashtag: #pycontw2023 Discord CH: # 📖|r0-track ^ Slides ^

Slide 3

Slide 3 text

Introduction Backgrounds, Motivations, Target Audiences 3 / 33

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

I felt… Needed a Pros-Cons comparison in now?

Slide 6

Slide 6 text

Target Audiences of this Talk Struggling with choosing packaging tools: for 3 types of Pythonistas: Library Developer Application Developer Automation / Scripting Developer

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Pre-explain About PEP 621 style pyproject.toml 10 / 33

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Pros/Cons for each tool Main comparison points 12 / 33

Slide 13

Slide 13 text

Pipenv https://pipenv.pypa.io/en/latest/ 13 / 33

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Poetry https://python-poetry.org/ 15 / 33

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

PDM https://pdm.fming.dev/latest/ 17 / 33

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

pip-tools https://pip-tools.readthedocs.io/en/latest/ 19 / 33

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

Hatch https://hatch.pypa.io/latest/ 21 / 33

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

pip https://pip.pypa.io/en/stable/index.html 23 / 33

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Summary What is the best tool? (In some use cases) 25 / 33

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Appendix: Rye https://rye-up.com 29 / 33

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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?

Slide 32

Slide 32 text

See you in PyCon APAC 2023! 27-29 October in Tokyo, Japan

Slide 33

Slide 33 text

Questions? Hashtag: #pycontw2023