スクリプトのお勉強

Pythonパッケージ管理の歴史

投稿日:

歴史っても、あまり過去に興味がないので、、

Pythonのパッケージ管理の歴史は、常に流動的で、そもそもからして、
とてもじゃないがまとめて説明できるようなものではないです。

はっきり言って昔からよく分かりません。Python2系の時は全くのカオスでした。今ではまだまし、というところです。

パッケージ管理 = “ライブラリ管理” + “仮想環境管理”

そもそもパッケージ管理という概念も、昔からすれば変遷してます。
昔はパッケージ管理といっても”ライブラリアーカイブ”しかなく、ライブラリのインストールや、仮想環境管理は全くの別物でした。

でも当然ながら地続きの話です。

いつの時点で何を使っていたか

なので、いつの時点で何を使っていたか、を時系列で書いてみようと思います。

候補は以下です。以下は一回は使ったことがあります。昔のことなので、記憶が間違ってる可能性はあります。

  • distutils
  • distribute
  • setup.py ( + egg)
  • easy_install(ez_setup.py)
  • virtualenv
  • pyenv
  • pyvenv
  • venv
  • wheel
  • pip(+ setuptools)
  • pipenv
  • poetry

2021年時点でのパッケージ管理ツール一覧

2021年時点でのパッケージ管理ツール一覧を書いてみます。

時期とはそのツールが生きていた?時期です。過去ではかなりあいまいです。

分類とは、とりあえず感で、以下に分けてみました。以下は完全に分類するものではなく、何を主に行うかという観点で分けてあります。

  • ライブラリアーカイブ(LA): ライブラリをまとめて一つのファイルにするツール
  • ライブラリインストール(LI): 実行環境にライブラリを追加するツール
  • 仮想環境管理(VR): 実行環境を複数作成するツール
ツール名時期分類内容
distutils2000 –LA/LI今でも内部では存在する。distutilsを直接使うことはない
distribute2008 – 2013LA2008年にsetuptoolsから分離したが、2013年にsetuptoolsに統合
setup.py(+ egg)? –LAいまでも基本はsetup.pyでアーカイブして、pipでインストールすること。eggはファイル形式
easy_install(ez_setup.py)– 2016LAsetuptoolsを使うためのコマンドとしてよく使われていた。今は不要
virtualenv2007 –VR昔は、単体で仮想環境を作るツールとして、virtualenv_wrapperと共に使われていた。今は Python 3.3からvenvのサブセットとして venvに統合
pyenv2012 –VR仮想環境より広く、Pythonバージョン管理ツール。これにプラスして、pipenvやpoetryを使う。
pyvenv?VRvenvの前身。私が思ったより人気ない。。
venv2012 –VRPython 3.3 から入ってる、Python標準の仮想環境管理ツール。正確にはモジュール。
wheel2012 –LAパッケージファイル形式。PEP 42で規定されている、Python wheel packaging standardのリファレンス実装
pip(+ setuptools)2006 –LI定番のライブラリインストールツール
pipenv2018 –LI/VR仮想環境作成の定番ツールの一つ
poetry2018 –LA/LI/VR仮想環境作成の定番ツールの一つ

参考

  • https://www.yunabe.jp/docs/python_package_management.html
    過去のパッケージ管理について詳しく書いてあります。
  • https://engineer.recruit-lifestyle.co.jp/techblog/2019-12-25-python-packaging-specs/
    過去のパッケージング標準について書いてあります。
  • https://www.pypa.io/en/latest/history/
    PyPi標準についての歴史

-スクリプトのお勉強

執筆者:

関連記事

WSL2にOpenCV + Pythonをインストールする

お手軽にやろうと思ってやってみました。作業手順自体を見ると、お手軽ではないかもしれません。 環境 インストールする/した環境は以下の通りです。 WSL2Ubuntu 20.04.2 LTSPython …

Nuxt.jsのFormで入力/確認/完了フォームを作成してみた(その2)

前回の記事の続きです。以下について書いていきます。この記事で終わりのはず? バリデーション機能(主にIPアドレスのバリデーション追加)画面 バリデーション機能 バリデーション機能は、vee-valid …

fastapi + SQLAlchemy で CRUDアプリケーションを作ってみる

概要 勉強用に、PythonでPostgresqlを制御しようと思います。の続きです。 前回でPostgreSQLと、データベース/テーブルまでは用意したので、今回はAPIを作成しようと思います。 実 …

Nuxt.js – CRUDアプリケーションのフォーム/一覧を作成する

前回で作ったAPIのフロントエンドアプリケーションを作ろうと思います。 どういうアプリ? サンプルとして作ったAPIが住所録的だったので、住所録を作りました。 以下の機能があります。 登録(確認付き) …

yoyo-migrationsを使ってみる

勉強用に、PythonでPostgresqlを制御しようと思います。 その前に、Postgresqlの設定と、マイグレーションをしようかと思います。まずyoyo-migrationsを使用します。 y …

google オプトアウト Click here to opt-out.