以下の発表(2023/10/12)につき作成した、Pythonのパッケージ管理について学ぶ上で有益なリンクを集めたもの。
Pythonでの開発に関するベストプラクティス等を知ることは目的にしていない。
Package Managerを自作したり、開発にコミットするために必要なベースの知識を補うリンク集。
誤字脱字、用語不統一、勘違いはごめんなさい。 他言語でも、現代Package Managerでこれは必要だとかこれは読んでおくべきだというのがあれば教えて下さい。
- Donation
- 全体感がわかるもの
- Package Manager Library
- バージョニング
- 依存解決アルゴリズム(dependency resolver)
- Discussion
- その他のPackage Managerや関連資料
- Donation for the Packaging Workgroup – Python Software Foundation
- Pythonのパッケージ周りへの資金援助が行えるDonationフォーム
- An Overview of Packaging for Python — Python Packaging User Guide
- pypackaging-native
- PythonのPackagingが抱える問題、その現時点での解決策をまとめたドキュメント
- インテルがスポンサードするPyPA関連の議論でもベースとなる知識になっている
- PyPIの目的やエッジケースの存在についても整理されているため必読
- How to improve Python packaging, or why fourteen tools are at least twelve too many | Chris Warrick
- 比較的新しい記事の中では、正確にPyPA管理のツールやPEPの実情がまとまっている、言葉が過激なのでやや注意
- NodeやC#との比較もありPackage Manager全体観からの指摘がある
- Pythonの環境構築を自分なりに整理してみる. 先日、 kawasaki.rb の懇親会で「AWS… | by Aki Ariga | Medium
- パッケージ管理周辺の各ツールの概要
- Rubyとのカルチャーの違いにも触れている
- Python パッケージ管理技術まとめ (pip, setuptools, easy_install, etc) | yunabe.jp
- パッケージ管理周辺の各ツールの概要
- 2015年の記事であり一部古い事に留意
- Inside The Cheeseshop: How Python Packaging Works (SciPy 2018)
- PyPAメンバーによるAnaconda登場前後の時代背景解説、動画あり
- Dustin Ingram - Inside the Cheeseshop: How Python Packaging Works - PyCon 2018 - YouTube
- PyPAメンバーによる歴史概要の動画サクッと見れる系
- 過去のスライド: Dustin Ingram (@di_codes) on Speaker Deck
- みんなのPython勉強会#77 パッケージングしよう | PPT
- 2022年のPythonパッケージ作成における標準や何を使うべきかが書かれている
- 作者のaodag氏は以前にも深い内容で多くのパッケージ管理に関する登壇を行っている
- [PyCon JP 2022] setuptoolsの最近 (Atsushi Odagiri) - YouTube
- パッケージングの呼び声 Python Charity Talks in Japan 2021.02
- eggとはなんだったのか 栄光のsetuptools | PPT
- pyconjp 2019 LT 今日のsetuptools | PPT
- Pythonでの開発を効率的に進めるためのツール設定 | PPT
- Pythonとパッケージングと私 | PPT
- パッケージングを支える技術 pyconjp2016 | PPT 動画
- MH07 Packaging最前線 - YouTube
- パッケージングの今 | PPT 動画
- パッケージングの今と未来 | PPT 動画
- "The Packaging Lifecycle with Poetry" - Clinton Roy (Kiwi Pycon X)
- poetry作者による解説の動画
- virtualenvやパッケージングが難しい問題について言及している
- Kenneth Reitz - Pipenv: The Future of Python Dependency Management
- pipenvメンテナのKenneth Reitzによるpipenv紹介、動画あり
- lockファイルの重要性とpip-toolsの課題について言及
- Elana Hashman - The Black Magic of Python Wheels - PyCon 2019
- PyPAメンバーによるwheel解説した登壇動画
- Dynamic LinkingやABIsが実際どのように動くか最も分かりやすく把握できる
- binary wheelはPythonにとって重要である事を丁寧に解説
- Pythonパッケージの影響を歴史から理解してみよう! (Kir Chou) PyCon JP 2020
- Pythonパッケージ管理の2020年までの歴史的経緯をまとめた資料、動画あり
- 各パッケージ管理ツールやPEPを1つにまとめた時系列の図があり非常に分かりやすい
- wheelのありがたさとAnacondaへの要望 - YAMAGUCHI::weblog
- 2016年までのAnacondaとwheelの関係を書いた記事
- コミュニティ事情や関連のPEPへのリンクなど
- Python パッケージングの標準を知ろう - Tech Blog - Recruit Engineer
- Pythonのパッケージ bdist, egg, sdistに関して、歴史を含め記載した記事
- 各PEPへのリンクや制定方法など
- pipとpipenvとpoetryの技術的・歴史的背景とその展望 - Stimulator
- 当gist筆者が書いた記事
- 技術、開発、solver、コミュニティなどの観点からpip, pipenv, poetryその他ツールについて記載
- PackagingCon - YouTube
- PackagingConというパッケージ管理についての国際カンファレンスのYouTubeアカウント
- アーカイブ動画には「パッケージ管理とは何か」「依存解決とは何か」というレベルからPyPIメンバーの講演、他言語やOSのパッケージ管理について等様々な動画がある
- Python Packaging Why don't you just? - Tzu-ping Chung | PackagingCon 2021 - YouTube
- Pythonのパッケージ管理周りのエコシステムの工夫
- Changes in Python packaging – what downstream packagers need to know - Thomas Kluyver - YouTube
- 2021年前後までのPythonパッケージ管理の変化
- PyCon Packaging Summit
- PyCon US Packaging Mini-Summit 2019
- PyCon US 2020 Python Packaging Summit
- PyCon 2022 - Packaging Summit
- - Packaging Summit - PyCon US 2023
- sprintからはじまり2022年からはかなり本格的に行われているPyCon USでのパッケージ管理のSummit
- 一番コアな開発者たちの生のDiscussionでありサマリ重要
- Why PyPI Doesn't Know Your Projects Dependencies - Dustin Ingram
- Pythonのプロジェクトの依存解決が難しい理由について簡潔に書かれた記事
- Configuring setuptools using pyproject.toml files - setuptools 68.2.2.post20230929 documentation
- setuptoolsを用いたpyproject.tomlでのパッケージ作成のドキュメント
- buildシステムやパッケージの検出に関して記載がある
- 俺流!PEP668とうまくやっていく方法 | スクエニ ITエンジニア ブログ
- pip23.0で導入されたPEP668に対する理解と対策が丁寧に書かれている
- What Are Python Wheels and Why Should You Care? – Real Python
- wheelとはなにか、wheelを推奨する記事、丁寧
- Python のプロジェクトマネージャー pdm の紹介
- pdmの紹介、ドキュメントの翻訳記事
- pdmが採用していた__pypackages__等の解説あり
- 利用事例
- Python Package Manager Shootout
- Pythonのパッケージ管理の速度を比較しているサイトとrepo
- pip
- pipx
- hatch
- flit
- pipenv
- pdm
- pip-tools
- poetry
- conda
- mamba
- miniconda
- rye
- rip
- rattler
- Spack
- micropipenv
- enscons
- pythonloc
- pyflow
- tox
- pypm
- huak
- pearl
- Ferry
- dephell
- pixi
- molt
- Should You Use Upper Bound Version Constraints?
- Pythonのバージョニングが抱えるバージョン上限表現の問題について、やや過激なため注意
- poetry、pdmなどを比較しつつパッケージが古くなった時にバージョンの制約が壊れていく問題に触れている
- conda-forgeではRepodata patchingのような概念が取り入れられている
- condaやmambaを開発するprefixによるpatchingに言及した記事
- Semantic Versioning 2.0.0
- 1.0.0のようなバージョン表記手法
- Calendar Versioning
- YY.MM.DDのようなバージョン表記手法
- Dependency Resolution - pip documentation v23.2.1
- pipの依存解決がどのように行われているのか、アルゴリズムに関する記載がある公式のドキュメント
- Answer Set Solving in Practice
- Solverを実装する上での各概念、コツがテキスト、動画、スライドでまとまっているので必読
- Conflict-driven clause learning - Wikipedia
- PubGrubのベースとなっているCDCLアルゴリズムの丁寧なWikipedia
- アルゴリズムの図解、実装ライブラリやDPLLアルゴリズムとの対比が記載されている
- DPLL: DPLL algorithm - Wikipedia
- バージョンの充足可能性問題 | POSTD
- 依存解決の入りとしていいと思う翻訳記事
- Dependency hell - Wikipedia
- 依存関係の難しさ
- Multiple inheritance - Wikipedia
- 各言語のdiamond problemに対する対応などが書かれている
- Revent dependency confusion attackに関する記事
- 充足可能性問題に関するSAT研究の流れが書かれている資料
- Introducing rip - the fast & barebones pip implementation | prefix.dev
- prefixによりRustで書かれた高速なPython Package Installerのripの解説
- PubGrub実装やメタデータアクセスに関する言及がある
- Conda Internals - Speaker Deck
- 2015年のconda開発者によるcondaの挙動に関するスライド
- 基本的なconda installの流れを全てさらいながらSATに触れており分かりやすい
- conda install - conda documentation
- condaのパッケージ情報の取得および、インストールの流れに関するドキュメント
- Anaconda | Understanding and Improving Conda's performance
- condaがどのように高速に動作するか記載されたAnaconda公式ブログ
- metadataに関する工夫やsolverの動作についての記載がある
- solverのパッケージ優先度についての考え方がまとまっている貴重な記事
- Anacondaが考えるPythonパッケージ管理の未来に関する記事もオススメ
- Deep dive: solvers
- condaの依存解決の方法をざっくり記載したドキュメント
- 各ワードの説明など実際にcondaを読み解く時に重要になる
- PicoSAT
- condaで長らく使われていた旧リゾルバ
- R等でも使われる
- [https://fmv.jku.at/picosat/]
- Pythonバインディング
- condaで長らく使われていた旧リゾルバ
- CryptoMiniSat
- condaにPicoSAT代替として導入されたリゾルバでありlibmambaが使われる前のcondaデフォルト(--solver=classic)
- [https://github.com/msoos/cryptominisat]
- mambaやripのinstallが何故早いのか調べたメモ - Stimulator
- conda, mamba, pixiの歴史とその開発者、ロジックに関して調べたメモ
- Welcome to Mamba’s documentation! — documentation
- conda内で使われるMambaのドキュメント
- 内部で出てくる細かなワードの紹介
- libmamba vs classic — conda-libmamba-solver
- libmambaと元のSolverの違いに関するlibmamba側のドキュメント
- 実装における思想の違いにまで詳しく触れている
- Releasing mamba 1.0. The fast cross-platform package manager… | by Wolf Vollprecht | Medium
- コア開発者の@wolfの記事
- 各ツールの紹介とコミュニティへの案内
- 他にも開発状況やアイデアの起点になった記事が書かれている
- lisolvo
- Rustで書かれたリゾルバ、libsolvがもとになっており、mambdaで使われている
- The prefix.dev blog
- Mambaの開発者が立ち上げたパッケージマネージャー開発を行うprefix社のブログ
- Mambaのrelease解説や依存解決、各周辺ツールの解説が行われている
- Scaling conda: A Closer Look at conda’s New libmamba Solver
- libmamba開発者による解説の動画、高速化に使われるロジックの解説
- エコシステム全体感に関する動画もあり分かりやすい(ブログに書いてある情報が主)
- pluginエコシステムに関する動画もあり昨今のPython事情においてPluginがなぜ必要で、それがmambaにどう影響するか話している
- conda-forge, (lib)mamba & libsolv: universal and reusable parts - Wolf Vollprecht | PackagingCon2021 - YouTube
- mambaの開発者がcondaのエコシステム、何故mambaが必要なのか、mambaは何をしているのかについて語っている動画
- Open Software Packaging for Science | by QuantStack | Medium
- mambaの開発者によるmambaプロジェクトの概要の紹介
- Managing Conflicts with Mamba. New detailed conflict error message in… | by Antoine Prouvost | Medium
- mambaのコントリビューターによる競合管理に関する簡単な記事
- The New Rattler Resolver | prefix.dev
- mambdaがcondaエコシステムとやり取りするためのAPIをまとめて実装したRattlerの記事
- libsolvを使っているロジックに関する言及とパフォーマンス比較がある
- pub/doc/solver.md at master · dart-lang/pub
- PubGrubが実装されているDartのPackage ManagerであるPubの公式ドキュメント
- アルゴリズムの詳細、動作手順が非常に詳しく記載されている
- PubGrub: Next-Generation Version Solving | by Natalie Weizenbaum | Medium
- PubGrubをDartに実装した方の解説記事
- [翻訳]PackageManger/依存関係解決PubGrubについて!
- 上記PubGrubの海外記事の翻訳
- 冒頭にある「Rust(cargo), Node(npm)」にはPubGrubは使われていないため注意
- 「パッケージ管理ツール poetry が依存関係を解決するアルゴリズムについて」 2021-11-20 C-6 - YouTube
- poetryが利用するPubGrubについて日本語で最も分かりやすく解説している動画
- Version solving - PubGrub Guide
- Rustで実装されたPubGrubクレートのドキュメント
- かなり詳しくアルゴリズムの背景が書かれており参考になる
- 依存解決向けに書かれたサンプルが別途あり、こちらの方が概要つかみやすいかも
- 関連する解説の動画
- jhawthorn/pub_grub: A ruby port of the PubGrub version solver
- RubyによるPubGrub実装
- 実際にこれがMolinilloというライブラリとなり、後にbundlerに組み込まれた
- mpizenberg/elm-pubgrub: PubGrub version solving algorithm in elm
- ElmによるPubGrub実装
- Elm-pubgrub: a state of the art dependency solver, in elm - Show and Tell - Elm
- この実装に関してのスレッド
- ddelange/pipgrip: Lightweight pip dependency resolver with deptree preview functionality based on the PubGrub algorithm
- 簡易なPythonによるPubGrub実装
- Discussion Python Org
- 公式の議論の多くがここで行われている、方向性など
- 質問はDiscordの方が多い感ある
- Python Packaging Strategy Discussion - Part 1 - Packaging - Discussions on Python.org
- Python Packagingの議論スレの中でも大きなもの
- 多くの注目、コメントが集まり、各Package Manager開発者が集まり、今のPackagingの多くの課題がここに集まっているので必読
- Part2 -> Python Packaging Strategy Discussion - Part 2 - Packaging - Discussions on Python.org
- Python Packaging Strategy Discussion - Talk Python Live Stream - YouTube
- Python Package Managerに関わっている開発者が集まっている
- pip, hatchling, Denoなどの開発から得た知見と方向性に関するDiscussion
- 動画内で使われているスライド
- Your opinon wanted: please complete our survey on Python Packaging! - Packaging - Discussions on Python.orgなるPythonユーザがPackagingに対して求めている事のサーベイを行った時のデータをもとに会話が進む
- How should a lockfile PEP (665 successor) look like? - Packaging - Discussions on Python.org
- パッケージの再現性に関する最新のPEP 655(既にリジェクトされた)に関する議論
- 再現性とは何か、何をもって同一のartifactとするのかを中心に議論が繰り返されている
- sdistやMETADATAのPEPも参照のこと
- パッケージ管理のPythonの歴史の多くが詰まった議論となっている
- 以下も要参照
- Should Rye Exist? · mitsuhiko/rye · Discussion #6
- Ryeの作者が開いたDiscussion
- Rye作者のPython Package Managerへの考え方が書いてあり非常に参考になる
- poetryの作者も登場し新しいPEPへの気持ちも書かれている良スレ
- API to get dependencies without full download · Issue #474 · pypi/warehouse
- pypiのAPIが依存情報を返してくれるようになる前後の議論
- metadata、PEP 658までの流れが明瞭になるissue
- openSUSE:Libzypp satsolver - openSUSE Wiki
- conda等でも使われているlibsolvのプロジェクトページ
- 開発者により FOSDEM 2008 で発表された解説のスライド、動画へのリンクがありかなり参考になる
- 依存性解決のセマンティクス · eed3si9n
- JVM周りのパッケージ管理エコシステムとその依存解決方法について記載されている
- 第51章 依存関係の管理
- Gradleの依存解決に関するドキュメント
- 過去の歴史的な経緯での問題にも触れられており丁寧
- 振り返りながら学ぶPackage Manager(原稿)#iosdc #e
- iOSDC Japan 2021におけるiOS周りのパッケージ周りの事情が詳しく書かれている
- 歴史や各ツールの概要に触れながら進むスライド、動画があり分かりやすい
- Go Modules Reference - The Go Programming Language
- Goの公式ドキュメント
- Goのversioningなどの思想が書かれていてかなり分かりやすい
- research!rsc: Minimal Version Selection (Go & Versioning, Part 4)
- Go開発者による最小バージョンを選ぶ方法で依存解決を行う手法の提案
- Go開発者関連だとgo issue#44550の発言もかなり参考になった
- Goにおけるバージョン管理の必要性 − vgoについて − | PPT
- Fukuoka.goで発表されたvgoへの変化時のスライド
- Vendoringもまた難しいということが示されている
- node_modulesの問題点とその歴史 npm, yarnとpnpm
- 参考リンクも多くnpmの変遷がわかるので必読
- 依存解決に関してPythonとは別のnodeの思想による問題があることがよくわかる
- npmの依存関係について勘違いしていたこと
- npmのArboristについて言及された数少ない日本語記事
- 参考文献も多くnpmについて知る起点になる
- Ride Down Into JavaScript Dependency Hell | AppSignal Blog
- npmパッケージ多すぎて他の言語よりもHellという記事
- 依存を削減することがフロントエンド開発が早くなるための1つの要素になっている
- なんでbun installは速いのか?
- installが高速とフロントエンドで話題のPackage Manager
- Pythonと同じくキャッシュとAPIアクセスの数が重要
- nodejs modules all together
- node公式のmoduleの依存解決方法が書かれている
- ESM resolverがベースになっている
- 基本的にはviteもbunもこの方法に則っていて探索を削ったり並列化、キャッシュによる高速化を図っている
- Dependency Resolution - The Cargo Book
- RustのCargoのドキュメント
- resolverが2つあるので注意、どちらに関してもロジックが丁寧に解説されている
- links feildやSemVer, patch, workspaceに関する考え方など流石に素晴らしい
- 依存地獄の解決
- esoeryou
- Dealing with Dependencies in Rust
- Rustのの依存との付き合い方について
- 配布物に依存も含まれるため脆弱性や信頼性とかを気にする必要がある
- Ruby フルタイムコミッタの仕事報告 2023年Q2-3
- Rubyコミッターの@hsbtが書いたBundlerの依存解決について