本記事は
AWSアワード受賞者祭り
16日目の記事です。
✨🏆
15日目
▶▶ 本記事 ▶▶
17日目
🏆✨
こんにちは小山です。 最近のマイブームは黒烏龍茶です。
さて、今回はPythonをローカルで開発する際に使用しているvenvについて書いていきます。
はじめに
Pythonをローカルで開発する際の開発環境はvenvもしくはDockerを用いることが多いです。 Dockerは結構有名ですがvenvはPythonを使う人でも知らない人がそこそこいる印象なので、こんなのもあるんだよと紹介させていただきます。
venvとは
venvとは、Python(バージョン3.3以降)に標準で組み込まれている仮想環境作成ツールです。
特徴
1. プロジェクト単位で依存関係を分離
venvで作成した仮想環境は、そのプロジェクトだけで完結するPython環境になります。 そのため、異なるパッケージのバージョンでの開発が同時に可能となります。
例. Aプロジェクトは Django==3.2 Bプロジェクトは Django==4.2
2. 実行速度が速い
venvは実体としてはシンボリックリンクやフォルダ分けによる軽量構造です。 Dockerのようなコンテナ仮想化ではないため、起動や操作が非常に軽快です。 ローカル環境での開発はCPUやメモリが貧弱なことも多いので、サクサク実行が可能なのがとてもありがたいです。
できないこと
個人開発ではvenvをよく使っていますが、案件でvenvを使ったことがありません。 商用、というか案件での使用を難しくしている要因を2つ紹介します。
1. 複数サービス連携
venvはあくまでPythonのライブラリ管理ツールなので、DBやその他のサービスについての連携や管理はできません。 そのため、それらを含めた環境を一括管理したい場合はDockerのようなコンテナサービスの使用が必要です。
2. CI/CD連携
venvの実行はホストOSに依存するため、ローカル環境では問題なく稼働してもGitや他環境でうまくいくとは限りません。 そのため、こちらもより再現性の高いDockerの使用が望ましいです。
3. 複数のPythonバージョンでの開発
Pythonそのもののバージョンは変えられません。 そのため、pyenvを用いる必要があります。
ユースケース
上記特徴に上げたように、venvはやる事をはっきり決めているツールです。 そのため、すべてのプロジェクトで使用することは難しいと思いますが下記特徴に当てはまる場合は使用する価値があると思います。
- ローカル環境の計算リソースが貧弱な場合
- 1人でのシンプルなPythonスクリプトの開発
- サーバレスやLambda用コードの軽量実装
- 環境の再現性がそこまでシビアでないローカル作業
ユースケースを見てもらえばわかるように、 venv は軽くてすぐに使える、開発者のための「ミニサンドボックス」と考えるとよいでしょう。
おわりに
venvは小さくて地味なツールに見えるかもしれませんが、Python開発における土台を守る非常に重要な存在です。 「ローカル環境をクリーンに保って開発したい」 「同時に複数プロジェクトの開発をやりたい」
そんなことをお望みなら、まずは venv を導入するところから始めましょう。
おまけ
venvとよく比較されがちなDocker について、簡単ではありますが比較表を作成しました。
venv と Docker の違い
観点 | venv | Docker |
---|---|---|
目的 | ローカル環境の分離 | OSごと切り離した実行環境 |
範囲 | Python の依存ライブラリのみ | Python 以外のミドルウェア・OS 設定まで含む |
実行速度 | 非常に軽量(即時起動) | コンテナ起動に少し時間がかかる |
主な利用目的 | 開発環境の簡易管理 | 本番と開発の差異をなくす、CI/CD 利用など |