nikkie-ftnextの日記

イベントレポートや読書メモを発信

俺がPythonのパッケージマネージャなんだ

はじめに

ミリオンライブ!は全員がセンター!
祝・主演制公演🎉 nikkieです。

すごいことに気づいてしまいました。
何度も何度も仮想環境を作る中で境地に達した、あるいは、夏の暑さのせいかもしれません。

目次

Pythonチュートリアルより

取り上げられているのは

  • 仮想環境
    • 作成 python -m venv .venv
    • 有効化 source .venv/bin/activate
  • パッケージの管理 pip
    • python -m pip install

何度も何度も通ってきた道です。
これらのコマンドを開発者が実行しているんだよなということに気づきました。

俺達は、Pythonのパッケージ管理システムの一部

Pythonで開発する者は皆、Pythonのパッケージマネージャになっていると考えます1
要は、Pythonチュートリアルの方法は、人力を前提にしたパッケージ管理方法ということです。

パッケージマネージャ うちら の振る舞い

  1. 仮想環境を作成(venvモジュール(など2)を操作)
  2. 仮想環境を有効化
  3. パッケージのインストール(pipコマンド(など3)を操作)

venvpip単体では、望ましいパッケージ管理(=仮想環境にインストールする)ができません。
これらは組み合わせる必要があり、自動化するツールを学ばずに済ませようと思ったら、PythonチュートリアルにあるようにPython使いがパッケージマネージャとなります。
小さな機能を果たすモジュールを人がつなぎ合わせることで、人とツールからなるシステムとしてPythonのパッケージ管理が実現します。

もちろん、ソフトウェアエンジニアリングの経験から、システムからは可能な限り人は排した方がよいと考えます。
そのためには何らかのパッケージマネージャ(=ツール)を覚えることになるかなと思います:
Poetry, Pipenv, Hatch, PDM などなど4

各種パッケージマネージャは、いずれも小さな機能を果たすモジュールを組合せて実現されています。

俺達は機能豊富なパッケージマネージャにはなれていない

先述のチュートリアルでは以下も紹介されます

  • アンインストール python -m pip uninstall
  • 環境の再現
    • 一覧 python -m pip freeze > requirements.txt
    • 一覧からインストール python -m pip install -r requirements.txt

しかしながら、人・venvpipの組合せは、機能面では十分とは言えないと感じます。
機能が足りずに厳しいなという例はuninstall5

こういった感覚を抱き始めたら、パッケージマネージャのツールに移行する機会なのかなと思います。
俺達はやがて不要となるのです

終わりに

Pythonのパッケージ管理において、仮想環境を作ってインストールというやり方は、操作する人を含めたパッケージ管理システムであるという気づきでした。
俺が、俺達が、Pythonのパッケージマネージャなんだ!!!!

原始的なパッケージマネージャ 俺達⭐️からの移行先、機能豊富なパッケージマネージャ(のツール)は本当にたくさんあります。
Pythonにはパッケージマネージャがありすぎるという指摘は、人力パッケージ管理の余地がなく、パッケージ管理が成熟したプログラミング言語から見える様子ということなのだと思います。


  1. 言えたかも
  2. virtualenvといった他の選択肢があります
  3. uvといった他の選択肢があります
  4. 矢継ぎ早紹介はこちら
  5. ここにはpip-toolsで対処したいと考えています