はじめに
爪弾くは。nikkieです。
いろんなツールを見てきた中で、私がほしいPythonのパッケージマネージャの自作に踏み出しました。
まだEXPERIMENTAL(つまりは自分用)です!
目次
調
pipx
1でのインストールをオススメします。
% pipx install shirabe
(python -m pip install shirabe
のようにしてもインストールできると思います)
shirabeのコマンドはshirabe alpha
下に実装してあります。
試行錯誤していく中でインターフェースの変更がありうる(むしろ積極的にやったほうがいい)と考えているので、この決定です
shirabeで仮想環境を作る
.venvという名前の仮想環境(ディレクトリ)を作ります。
% shirabe alpha .venv
このとき、カレントディレクトリに依存ライブラリの記載があれば、shirabeが作る仮想環境には自動で依存がインストールされます
- requirements.txt
- 全ての依存がバージョン込みで記載されている想定(lockされている)
- requirements.in や pyproject.toml
- 後述するdirectの依存が記載されている
- shirabeは依存解決してrequirements.txtを作った上で、仮想環境にインストール
一例です。
% cat requirements.txt kojo-fan-art==0.1.1 % shirabe alpha .venv
% source .venv/bin/activate (.venv) % kojo-day kokoro rion # kojo-fan-artが提供するコマンドが使える {"kokoro": "Sunday", "rion": "Sunday"} (.venv) % python
>>> import the_solitary_castle_in_the_mirror # kojo-fan-artが提供するモジュールをimportできる
私のほしい仮想環境
いろんなツールを見てきた中で、私が認識したのは以下2点です
- 仮想環境の状態をコードでも管理できる
- directな依存もtransitiveな依存もrequirements.txtにバージョン込みで書き出された状態
- directな依存とは
pip install
で指定するライブラリ - transitiveな依存とは、directな依存が依存するライブラリ2
- 仮想環境は開発者が触れない
- requirements.txtと一致した状態
- 例えば、追加の依存ライブラリをインストールできない
どちらもRyeからの学びが大きいです。
(私が触った時点の)Ryeはpip-toolsを使って、directな依存もtransitiveな依存もlockファイルに書き出していました。
pipは依存解決が弱く、インストールできた組合せが正義となってしまいます。
それに対してインストールする前に依存解決ができるpip-toolsは、(他の言語を使っている方からはそれが当然かもしれませんが)とてもよいものだと感じています。
また、Ryeが作る仮想環境にはpip
がありません。
これには最初戸惑いましたが、考えてみると、開発者が作った仮想環境では簡単にpip install
できてしまうので、requirements.txt
の内容からズレてしまうわけですね。
今回のshirabe 0.1.0にあたっては、pip list
が見たければ代わりにrequirements.txt
を見ればよいと割り切りました。
また、依存を追加でインストールしたい場合は(手間ではありますが)現在の仮想環境を削除して、依存の記載を追加し、再度shirabeで仮想環境を作ればよいと考えています。
なおshirabeは現在、venvやvirtualenvと同じ範囲のカバーに絞っています(あえて小さくしている)。
もしかするとrunはサポートするかもしれませんが、buildやpublishまでは持たせない考えです。
終わりに
自作の仮想環境作成ツール shirabe の紹介でした。
解決された依存を記したファイル込みで仮想環境を作ることで依存を明示し、それによって別のマシンでも同様の仮想環境を再現しやすくなることを期待しています。
shirabe自体はまだ十分ではなく、いまは他のパッケージマネージャと肩を並べられません。
ですが、私は喉から手が出るほど欲しかったので自作しており、同様のニーズがある方がいたらよければ試していただき、さらには使い心地(よかった・伸びしろ)を教えていただけるととてもありがたいです。
応援ください!
P.S. ばんくしさんへ
過去にばんくしさんのアウトプットを取り上げましたが、
ばんくしさん、俺、一歩目を踏み出したよ!!