NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    ローカル環境を守るための軽量な仮想環境,venvについて調べてみた

    本記事は  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 利用など