スクリプトのお勉強

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

-スクリプトのお勉強

執筆者:

関連記事

svelteをチュートリアルしてみる

年末の休みは、svelteのチュートリアルをしてみました。なんとなくやはりそう?なので。 svelteとは Webアプリのフロントエンド(UI)用フレームワークです。要するにReactみたいなもんです …

Thunderbird プラグインの開発(プラグインでの実現方法)

前回 Thunderbird プラグインの WebExtension版開発方法を調べたので、開発したいプラグインと、WebExtension版プラグインでの実現方法について書いていきます。 開発するプ …

Vue.js 導入編

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

gradleのcommandLineでリダイレクト

gradleというビルドツールがあります。なぜかRPMを作成するのに使ってます。Ansibleも使ってるんですがね。。 それはともかく、ここの通りなのですが、例えばls -lRの出力を、プロジェクトデ …

CentOS7をRocky Linux 9に移行する

このVMのOSをCentOS7にした関係上、そろそろupdateする必要があります。そもそもCentOS7を選択した理由は、仕事で使用するからでした。 で、仕事ではRocky Linux 9なので、こ …

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