Successfully reported this slideshow.
Your SlideShare is downloading. ×

Python パッケージの影響を歴史から理解してみよう!

Advertisement

More Related Content

Advertisement

Python パッケージの影響を歴史から理解してみよう!

  1. 1. Kir Chou @ PyCon JP 2020 1 Pythonパッケージの影響を 歴史から理解してみよう!
  2. 2. ⾃⼰紹介 • Kir Chou • PyConの発表経験 • PyCon JP 2019 発表 • PyCon TW 2017, 2018, 2019 発表 • その他 • ソフトウェアエンジニア @ アマゾンジャパン 2 @k1rch0u kir.chou note35
  3. 3. 今⽇の献⽴ • 動機 • Python パッケージの歴史 • 歴史から学ぶこと • コミュニティが Python パッケージを解決する前の挑戦 • コミュニティが Python パッケージを解決した後の挑戦 • まとめ • Python パッケージの歴史に関する資料 3
  4. 4. 動機 4
  5. 5. 5 ある⽇、ビルダーツールチームが発表しました… これから、オープンソース化されたツールに移⾏しましょう!
  6. 6. 6 良いじゃないか?でも、なんで? 6
  7. 7. 7 @di_codes
  8. 8. Python パッケージの歴史 パッケージとは software distribution 8
  9. 9. 9 1991 Python 1.0
  10. 10. 10 ソースコードを他の⼈ に(から)与える(取る)ことは?
  11. 11. ソースコードを他の⼈に与えることは? 11 与える 取る
  12. 12. ソースコードを他の⼈から取ることは? 12 与える 取る
  13. 13. 13
  14. 14. RFC822 14 1991 20052003 Python 1.0 Python 2.0 2000 PEP241 PEP345 PEP314 disutils (egg) setuptools 2006 easy_install PEP405 tox virtualenv 20072008 2011 PyPI
  15. 15. 15 メタデータ: PEP241 (2001), PEP314 (2003), PEP345 (2005) ビルドツール: distutils, setuptools
  16. 16. 16 setuptools: setup.py EGGのメタデータ xxx.egg-info/PKG-INFO
  17. 17. 17 PyPI (Cheese Shop): PEP301 (2002/Nov) Package インストーラ: easy_install
  18. 18. 18 仮想環境(ビルド / テスト / リリース): tox, virtualenv (2007), venv@PEP405 (2011)
  19. 19. 19
  20. 20. 20 1991 2011 Python 1.0 2008 Python 3.0 RFC822 PEP566 PEP459 PEP426 PEP427,440PEP376 20052003 Python 2.0 2000 PEP241 PEP345 PEP314 disutils (egg) setuptools 2006 wheel easy_install bento/twine PyPI pip PEP405 tox virtualenv 2007 PEP394 PEP582 poetry pipenv 2012 2017 PyPI warehouse PEP262
  21. 21. 21 (延期)メタデータ2.0: PEP426 (2012), PEP459 (2013) メタデータ 2.1: PEP566 (2017/Dec)
  22. 22. 22 PEP566: pyproject.toml
  23. 23. 23 バージョン識別と依存関係 PEP386 (2009/Superseded), pip-tools/pip-sync (2012) PEP440 (2013), PEP508 (2015)
  24. 24. 24 パッケージインストーラー (2008): pip 公開ツール(2013): bento / twine / flit PyPI (2018): PyPI warehouse
  25. 25. 25 データベース : PEP262 (2001/Deferred), PEP376 (2009) Wheel: PEP425 (2012) / PEP427 (2012)
  26. 26. 26 PEP376 データベースインターフェース xxx.dist-info/WHEEL
  27. 27. 27
  28. 28. 28 ワン・フォー・オール: Conda / Pipenv / Poetry PEP517 (2015), PEP518 (2016)
  29. 29. 29 歴史から学ぶこと
  30. 30. Python パッケージの進化 30 1. メタデータスキーマの定義
  31. 31. 31 2. ビルドツール 1. メタデータスキーマの定義 Python パッケージの進化
  32. 32. 32 2. ビルドツール 1. メタデータスキーマの定義 3.公開ツール・PyPI Python パッケージの進化
  33. 33. 33 2. ビルドツール 1. メタデータスキーマの定義 4. インストーラ デプロイツール Python パッケージの進化 3. 公開ツール・PyPI
  34. 34. 34 2. ビルドツール 1. メタデータスキーマの定義 4. インストーラ デプロイツール 5. 複数 OS の問題 Python パッケージの進化 3. 公開ツール・PyPI
  35. 35. 35 2. ビルドツール 1. メタデータスキーマの定義 3. 公開ツール・PyPI 4. インストーラ デプロイツール 5. 複数 OS とバージョンの問題 Python パッケージの進化
  36. 36. 36 1991 Python 1.0 wheel PyPI Hosting pipenv poetry パターンは世代ごとに繰り返されます 2008 Python 3.0 tox Python 2.0 2000 disutils (egg) setuptools PyPI virtualenv bento/twine easy_install (egg) pip
  37. 37. 1994 アマゾン 1998 グーグル 37 コミュニティが解決する前の挑戦
  38. 38. 38 1991 1998 Python 1.0 グーグル 1994 アマゾン Python パッケージに標準はない
  39. 39. 39 ソースコードを他の⼈ に(から)与える(取る)ことは?
  40. 40. 歴史の中で同じ問題を解決する • ビルドツール • 依存関係リゾルバー • 複数Pythonバージョンのサポート • 公開ツール / パッケージレジストリ • インストーラー / デプロイツール • 仮想環境のサポート • 複数OSのサポート 40
  41. 41. 41 2. 内部構築ツール 1. 内部パッケージメタデータ 3.内部パッケージレジストリ 4. 内部デプロイツール
  42. 42. 42 3pパッケージは すべて内部ツールによって管理されます!
  43. 43. 43
  44. 44. 44 会社 コミュニティ X 機能拡張率 X コミュニティソリューションは より速く確実に拡張されます ~2012
  45. 45. パッケージングの問題は ほとんどが⼀般的です • ビルドツール • Python パケージングは? • Python パケージング依存関係はどでしょうか? • Python パッケージをビルドする⽅法は? • 公開ツール / パッケージレジストリ • Python パッケージを公開する⽅法は? • 他のPythonの依存関係をダウンロードする⽅法は? • インストーラー / デプロイツール • Python 環境を分離する⽅法は?(仮想環境) • Python パッケージはどのプOSをサポートしていますか? 45
  46. 46. これがコミュニティソリューションに 移⾏する理由です
  47. 47. 47 コミュニティが解決した後の挑戦
  48. 48. 1. 企業とコミュニティの理想的な関係 48 コミュニティの ソリューション 会社のソリューション コミュニティの ソリューション 会社のソリューション
  49. 49. 49
  50. 50. 50 クラウドサービス のビジネス クラウドサービス のプロバイダー 開発者 コミュニティ 協賛 お⾦を払う 新しいソリューション を提供する 新しいソリューションを採⽤する ワン・フォー・オール オール・フォー・ワン
  51. 51. 51 2. メタデータ標準の数 ∝ ツールの数
  52. 52. 52
  53. 53. 53
  54. 54. 54 PyConに参加しましょう! コミュニティに参加しましょう!
  55. 55. 55 古きをたずねて新しきを知る まとめ 歴史と前の挑戦 今の挑戦 コミュニティ
  56. 56. 背景資料 56
  57. 57. 歴史 • Dustin Ingram @ SciPy 2018 Inside the Cheeseshop: How Python Packaging Works • History of packaging written by Martijn Faassen • Kenneth Reitz @ PyCon 2018 Pipenv: The Future of Python Dependency Management • Clinton Roy @ Kiwi PyCon X (2019) The Packaging Lifecycle with Poetry • History of wheel written by Daniel Holth 57
  58. 58. パッケージ • Dave Forgac @ PyOhio 2015 Python Packaging from Init to Deploy • Elana Hashman @ PyCon 2019 The Black Magic of Python Wheel • Official Document: Packaging binary extensions (2013) 58
  59. 59. デプロイ(仮想環境) • Carl Meyer @ PyCon 2011 Reverse-engineering Ian Bicking's brain: inside pip and virtualenv • Bernat Gabor @ EuroPython 2019 Status quo of virtual environments 59
  60. 60. ご静聴ありがとうございました! 60

×