皆さまこんにちは、ウチイダです。
Python開発環境を整えるメモ、今回はパッケージ管理の仕組みをやっていきます。
前回はpythonランタイムのバージョン管理のためにpyenv を導入しました。
ウチイダの作業環境は以下です。
- Windows 11 21H2
- WSL2 Ubuntu20.04
- GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
以降の内容は、この環境にPython/Djangoの開発環境を導入していく手順メモとなります。
Python のパッケージ管理ツール
公式かつ最大手のpip
パッケージ管理ツールは公式からpip が提供されていますが、どうやら依存解決に難があるようなのです。
pip install しても、composer やnpmみたいに lock ファイルとかできないですしね…
あと、依存解決でインストールされたパッケージが、他からの依存がなくなっても削除されなかったりするようです。
ウチイダは基本的に公式のツールを使っていきたいスタンスですが、これはさすがに不安が残ります。
Pipenv, Poetry, Pyflow
というわけで、ほかの言語のパッケージ管理ツール機能を持ったサードバーティのツールを調べてみました。
Pipenv, Poetry, Pyflow の3つが有力っぽいです。Pipenv が先にリリースされて、そのあとにPoetry、 Pyflow の順番でリリースされています。
いろいろ調べたのですが、タイトルの通りPoetry を使ってみることにしました。
比較は今回の趣旨ではないので、ごく簡単に理由を書いておくことにします。
- PEPで策定されてる形式の設定ファイル(pyproject.toml)ひとつで管理できる方式
- pyproject.toml が使えるのがPoetry とPyflow
- Pyflow はまだ安定してないっぽい(バージョン1になってない)
選定が妥当かどうかはわかりません。技術選定の審美眼ほしい。
インストール
Poetry のアップデート
インストールした直後なので不要ですが、未来の自分のためにメモ。
poetry self update で更新します。
Poetry のアンインストール
インストールしたばかりなのでこちらも不要ですが、未来の自分のためにメモ。
インストールのコマンドの最後に –uninstall オプションをつけるだけです。削除のためのモードも含めてるんですね。
Poetry でプロジェクトを作る
空のプロジェクトを作るなら、poetry new <プロジェクト名>、
既存のディレクトリに作成する場合はpoetry init です。
Poerty で仮想環境を作る
Poetry はPythonのバージョン管理こそできませんが、仮想環境を作成することができます。
Python の公式ツールとなったvenv でも仮想環境は作れますが、仮想環境を起動してからスクリプトを実行しないといけないのですこし面倒です。
poetry は、そのCLIから仮想環境のランタイムで指定のスクリプトが実行できるので、開発中のコマンド実行が少し楽になるかもしれません。コマンド実行ごとのタイプ量が増えるので、一長一短かも。
仮想環境の作成先を設定
デフォルトの設定では、Poetryの仮想環境は$HOMEディレクトリ配下の専用ディレクトリに作成されます。
どの仮想環境が実行されているのかわかりづらくなるので、プロジェクトのディレクトリ内にあったほうがいいな…と思います。
というわけで、プロジェクトディレクトリ内に仮想環境が作成されるように、設定をしておきます。
これで、仮想環境は各プロジェクトのディレクトリ内に作成されます。
デフォルトでは.venv というディレクトリ名のようです。
仮想環境を作成・実行する
現在のターミナルで仮想環境に入るときは poetry shell、
仮想環境でコマンドを実行する場合はpoetry run <実行するコマンド>です。
パッケージのインストール
では本題、パッケージのインストールです。
ためしにDhango 3.2 をインストールしてみます。
poetry.lock の中身は長いので載せませんが、テキストファイルになっているので普通に読めます。
[[package]] と [package.dependencies] がセットになって、依存関係を表現しているようです。
Poetry にタスク実行機能はないのか
さて、ここまでくると、開発中に利用できるタスクランナーの機能が欲しくなってきます。
結論から言うと、Poetry はタスクランナーの機能は付いていません。
poetry run でそういうことができないのか調べてみたのですが、どうも目的が違うようです。
別のツールを使うか、Makefileなどでショートハンドを作ったりするのがよさそうです。
まとめ
今回はPoetry を利用してパッケージの依存関係ができるようにしてきました。
ウチイダはとても便利だと思ったのですが、公式の強さか、最も利用されているのはpipのようです。
依存関係が管理できないとなんだか不安なのは、Node.js やPHP での経験があるからこそでしょうか…
いずれにしても、効率的なチーム開発にはあったほうがよいでしょうし、導入している例も結構多いようなので、触っておいて損はないかなと思います。
以上です。あなたのお役に立てればうれしいです。