スクリプトのお勉強

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標準についての歴史

-スクリプトのお勉強

執筆者:

関連記事

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

背景 今回は、Webアプリケーションの、フロントエンド系のお話です。ほとんどの場合、バックエンドなのですが、時々フロントエンドもするんですよね。。 私の派遣先では、入力フォームを以下のように分ける要望 …

小ネタ: Python のdataclass でNone or “”を使わないJSONデータを定義する

PythonをREST APIのクライアントとして作成する際、dataclassesを使用しようと思いました。型が見た瞬間分かるし、しっかりしているからです。 でも、そのREST API は&#822 …

Mojolicious XML-RPC Pluginの開発(2)

はじめに 「Mojolicious XML-RPC Pluginの開発」のその2です。 本内容では、前回の内容を踏まえ、XML-RPC実装を、Mojoliciousのプラグイン機能を使用して実装しよう …

Vue.js 導入編

1.はじめに 近年、web関係で「クライアントサイドJavaScript」というのがトレンドになっているそうです。 「クライアントサイドJavaScript」と、従来のWebアプリケーションとの違いは …

Nuxt.js + Element + Responderでのtableサンプル作成

1. はじめに 最近、Webアプリケーションを作成する仕事が、少しずつですがあります。その際に使用するのは、殆どの場合「テーブル」です。 素のtableタグを駆使して作成した場合、テーブル内のセルにも …

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