Python仮想環境を使いこなす:venv、Docker、コードのセキュリティ対策を網羅したガイド
2024年1月10日
0 分で読めます汎用性が高く広く使われているプログラミング言語であるPythonには、モジュールやパッケージの豊富なエコシステムがあります。このエコシステムを活用するうえで、仮想環境の役割を理解することが重要です。この記事では、仮想環境とは何か、開発者に必要な理由、Pythonの仮想環境を作成するための一般的なツールについて解説します。
仮想環境とは何ですか?
仮想環境とは、特定のバージョンのPythonをインストールした環境と、追加のパッケージを格納する自己完結型のディレクトリツリーです。仮想環境を使うと、プロジェクトごとに依存関係を分離し、それぞれを独立した領域で管理できます。そのため、他のプロジェクトで使用している依存関係にかかわらず、各プロジェクト固有の依存関係を設定できます。
まず、Pythonに組み込まれているvenvモジュールを使って仮想環境を作成する方法を見てみましょう。
上記のコマンドでは、/path/to/new/virtual/environmentを任意の保存先に置き換えます。このコマンドは、指定したディレクトリがまだ存在しない場合は作成し、その場所に新しい仮想環境をセットアップします。
開発者に仮想環境が必要な理由
複数のPythonプロジェクトを扱う場合、プロジェクトごとに異なるバージョンのPythonやPythonパッケージが必要になることがあります。すべてをグローバルにインストールすると、バージョンの競合などの問題が生じる可能性があります。こうした問題を解決するのが仮想環境です。
仮想環境を使うと、依存関係を気にせず複数のPythonプロジェクトを開発できます。Pythonやその他のパッケージをインストールできる隔離された環境が用意されるため、各プロジェクトがそれぞれ独自の依存関係を持ち、互いに干渉することはありません。
さらに、仮想環境はプロジェクトの再現性を確保するのにも役立ちます。チームで作業し、コードをほかのメンバーと共有する場合には、特に重要です。
Pythonの仮想環境を作成するさまざまなツール
Pythonの仮想環境を作成するツールはいくつかあります。ここでは、その一例を紹介します。
venv:Python 3.3以降に標準で付属するPythonライブラリです。仮想環境を作成し、管理できます。
上記のコマンドでは、/path/to/new/virtual/environmentを任意の保存先に置き換えます。このコマンドは、指定したディレクトリがまだ存在しない場合は作成し、その場所に新しい仮想環境をセットアップします。
virtualenv:隔離されたPython環境を作成する、非常に人気の高いツールです。venvよりも古く、より多くの機能を備えています。
pipenv:パッケージ管理の優れた仕組みをPythonに取り入れることを目指したツールです。Pipfile、pip、virtualenvを1つのコマンドにまとめています。
つまり、仮想環境はPython開発に欠かせない要素です。経験豊富なPython開発者でも、これから始める方でも、仮想環境を理解して活用することで、開発プロセスを大幅に改善できます。
venvでPythonの仮想環境を作成する
次に、Pythonに組み込まれているモジュールvenvを使って、仮想環境を作成する方法を見ていきましょう。Pythonで仮想環境を活用することは、プロジェクト固有の依存関係を分離し、開発環境を整理された状態に保つためのベストプラクティスです。そのため、venvはPythonアプリケーションを扱う開発者やDevOps担当者に欠かせないツールです。
venvを使って仮想環境を作成する方法
venvを使った仮想環境の作成は簡単です。ターミナルでプロジェクトディレクトリに移動し、次のコマンドを実行します。
このコマンドは、現在のディレクトリにmyenvという名前の新しいディレクトリを作成します。このディレクトリに仮想環境が格納され、Pythonインタープリター、標準ライブラリ、各種サポートファイルが含まれます。
仮想環境を有効化して使う方法
仮想環境を作成したら、有効化する必要があります。環境を有効化するとPATHが調整され、pythonコマンドはグローバルのPythonインタープリターではなく、仮想環境内のバージョンを実行するようになります。
次のコマンドで仮想環境を有効化できます。
有効化すると、ターミナルのプロンプトが変わり、現在有効な環境が示されます。ターミナルは次のように表示されます。
これで、グローバルのPython環境に影響を与えることなく、この環境にパッケージをインストールできます。
仮想環境へのPython 3のインストール
venvモジュールはPython 3.3以降に付属しているため、環境を作成するとPython 3が自動的にインストールされます。ただし、環境を作成する際に別のPythonバージョンを指定することもできます。たとえば、Python 3.7の環境を作成する場合は、次のコマンドを使います。
インストールの確認
仮想環境にPython 3がインストールされていることを確認するには、次のコマンドを使います。
このコマンドを実行すると、環境にインストールされているPythonのバージョンが表示されます。
venvを使って仮想環境を作成、管理することは、Python開発に欠かせないスキルです。プロジェクトの依存関係を管理し、プロジェクトの一貫性と信頼性を確保する効果的な方法です。
応用編:DockerコンテナでローカルのPython開発環境をセットアップする
Dockerコンテナを使うと、再現性のある成果物を作成し、ホストOSとのバージョンの不一致を避けることができます。Dockerを使ってローカルのPython開発環境をセットアップする方法を見ていきましょう。Dockerとは何か、Python開発に役立つ理由、Dockerfileの作成方法、Dockerコンテナ内でPythonアプリケーションをビルドして実行する方法、そしてSnykでPython Dockerアプリケーションを保護する方法を解説します。
Dockerとは何ですか?
Dockerは、アプリケーションのデプロイ、スケーリング、管理を自動化するオープンソースのプラットフォームです。ソフトウェアをコンテナと呼ばれる標準化された単位にまとめ、ライブラリ、システムツール、コード、ランタイムなど、実行に必要なすべてを含めます。Dockerを使うことで、開発環境から本番環境まで一貫した環境を確保できます。
Python開発にDockerを使う理由
DockerがPython開発に役立つ理由はいくつかあります。
一貫性:Dockerコンテナを使えば、デプロイ先にかかわらず、アプリケーションを常に同じように実行できます。
分離:Dockerは環境を分離するため、異なるプロジェクトの依存関係を個別に管理できます。依存関係の管理が容易になり、プロジェクト間の競合を避けられます。
再現性:Dockerコンテナは再現性が高く、同じ環境を簡単にほかの人と共有できます。
Pythonアプリケーション用のDockerfileを作成する
Dockerfileは、Dockerイメージを作成するためのコマンドと手順を記述したスクリプトです。Pythonアプリケーション用の基本的なDockerfileの例を紹介します。
このDockerfileでは、まずPython 3.8のイメージを指定します。次に、requirements.txtファイルをDockerイメージにコピーして、Pythonの依存関係をインストールします。その後、残りのコードをDockerイメージにコピーし、アプリケーションを実行するコマンドを指定します。
Dockerコンテナ内でPythonアプリケーションをビルドして実行する
Dockerfileを作成したら、docker buildコマンドでDockerイメージをビルドできます。
このコマンドはDockerfileからDockerイメージをビルドし、your-python-appという名前のタグを付けます。
Dockerコンテナ内でアプリケーションを実行するには、docker runコマンドを使います。
このコマンドは、Dockerコンテナ内でアプリケーションを実行し、コンテナのポート8000をマシンのポート8000にマッピングします。
SnykでPython Dockerアプリケーションを安全に保つ方法
Snykは、Dockerイメージのセキュリティ脆弱性を検出して修正するためのツールです。CI/CDパイプラインに統合することで、デプロイ前にDockerイメージの安全性を確認できます。
Snykを使うには、まずインストールします。
次に、Dockerイメージの脆弱性をテストします。
このコマンドは、DockerイメージとDockerfileの脆弱性をスキャンします。脆弱性が見つかった場合、Snykは詳細情報と修正方法の推奨事項を提示します。
DockerでPythonアプリケーションをコンテナ化するベストプラクティスについて詳しく解説した記事や、Snyk AdvisorでPyPI上の健全で安全、かつ適切にメンテナンスされているPythonパッケージを見つける方法、SnykでPythonアプリケーションを保護する方法もぜひご覧ください。
次に進むには?
最後に、Pythonや仮想環境のセットアップについて、さらに学び、理解を深めるための豊富なリソースをご紹介します。
Pyenvのドキュメント
Pyenvは、複数のPythonバージョンを管理するための、シンプルで強力なクロスプラットフォームツールです。Pyenvのドキュメントでは、Pyenvを使ったPythonバージョンのインストール、使用、管理方法を解説しています。
リンク:Pyenvのドキュメント
Venvのドキュメント
Venvは、Python 3.3以降に付属する、隔離されたPython環境を作成するためのツールです。Venvのドキュメントでは、Pythonの仮想環境の作成、使用、管理方法を解説しています。
リンク:Venvのドキュメント
Dockerのドキュメント
Dockerは、開発者がコンテナ内でアプリケーションをビルド、共有、実行できるプラットフォームです。Dockerのドキュメントでは、Dockerコンテナのインストール、使用、管理方法を解説しています。
リンク:Dockerのドキュメント
その他の役立つリソース
Pythonのインストールや仮想環境の管理について、さらに詳しく実践的に学べるリソースを以下に紹介します。
開発者の方にもDevOps担当者の方にも、これらのリソースがソフトウェア開発の取り組みに役立ちます。
Pythonの脆弱性を検出して修正
Snykの脆弱性スキャンと修正アドバイスで、アプリケーションを保護しましょう。
クレジットカードは不要です。
またはAzure AD、Docker ID、Bitbucketで登録
Snykを利用することで、利用規約およびプライバシーポリシーを含む各種ポリシーに同意したものとみなされます。


