Skip to main content

Python仮想環境を使いこなす:venv、Docker、コードのセキュリティ対策を網羅したガイド

著者
blog feature snyk container custom base recommendations

2024年1月10日

0 分で読めます

汎用性が高く広く使われているプログラミング言語であるPythonには、モジュールやパッケージの豊富なエコシステムがあります。このエコシステムを活用するうえで、仮想環境の役割を理解することが重要です。この記事では、仮想環境とは何か、開発者に必要な理由、Pythonの仮想環境を作成するための一般的なツールについて解説します。

仮想環境とは何ですか?

仮想環境とは、特定のバージョンのPythonをインストールした環境と、追加のパッケージを格納する自己完結型のディレクトリツリーです。仮想環境を使うと、プロジェクトごとに依存関係を分離し、それぞれを独立した領域で管理できます。そのため、他のプロジェクトで使用している依存関係にかかわらず、各プロジェクト固有の依存関係を設定できます。

まず、Pythonに組み込まれているvenvモジュールを使って仮想環境を作成する方法を見てみましょう。

$ python3 -m venv /path/to/new/virtual/environment

上記のコマンドでは、/path/to/new/virtual/environmentを任意の保存先に置き換えます。このコマンドは、指定したディレクトリがまだ存在しない場合は作成し、その場所に新しい仮想環境をセットアップします。

開発者に仮想環境が必要な理由

複数のPythonプロジェクトを扱う場合、プロジェクトごとに異なるバージョンのPythonやPythonパッケージが必要になることがあります。すべてをグローバルにインストールすると、バージョンの競合などの問題が生じる可能性があります。こうした問題を解決するのが仮想環境です。

仮想環境を使うと、依存関係を気にせず複数のPythonプロジェクトを開発できます。Pythonやその他のパッケージをインストールできる隔離された環境が用意されるため、各プロジェクトがそれぞれ独自の依存関係を持ち、互いに干渉することはありません。

さらに、仮想環境はプロジェクトの再現性を確保するのにも役立ちます。チームで作業し、コードをほかのメンバーと共有する場合には、特に重要です。

Pythonの仮想環境を作成するさまざまなツール

Pythonの仮想環境を作成するツールはいくつかあります。ここでは、その一例を紹介します。

venv:Python 3.3以降に標準で付属するPythonライブラリです。仮想環境を作成し、管理できます。
上記のコマンドでは、/path/to/new/virtual/environmentを任意の保存先に置き換えます。このコマンドは、指定したディレクトリがまだ存在しない場合は作成し、その場所に新しい仮想環境をセットアップします。

$ python3 -m venv myenv

virtualenv:隔離されたPython環境を作成する、非常に人気の高いツールです。venvよりも古く、より多くの機能を備えています。

$ pip install virtualenv
$ virtualenv myenv

pipenv:パッケージ管理の優れた仕組みをPythonに取り入れることを目指したツールです。Pipfile、pip、virtualenvを1つのコマンドにまとめています。

$ pip install pipenv
$ pipenv --three

つまり、仮想環境はPython開発に欠かせない要素です。経験豊富なPython開発者でも、これから始める方でも、仮想環境を理解して活用することで、開発プロセスを大幅に改善できます。

venvでPythonの仮想環境を作成する

次に、Pythonに組み込まれているモジュールvenvを使って、仮想環境を作成する方法を見ていきましょう。Pythonで仮想環境を活用することは、プロジェクト固有の依存関係を分離し、開発環境を整理された状態に保つためのベストプラクティスです。そのため、venvはPythonアプリケーションを扱う開発者やDevOps担当者に欠かせないツールです。

venvを使って仮想環境を作成する方法

venvを使った仮想環境の作成は簡単です。ターミナルでプロジェクトディレクトリに移動し、次のコマンドを実行します。

python3 -m venv myenv

このコマンドは、現在のディレクトリにmyenvという名前の新しいディレクトリを作成します。このディレクトリに仮想環境が格納され、Pythonインタープリター、標準ライブラリ、各種サポートファイルが含まれます。

仮想環境を有効化して使う方法

仮想環境を作成したら、有効化する必要があります。環境を有効化するとPATHが調整され、pythonコマンドはグローバルのPythonインタープリターではなく、仮想環境内のバージョンを実行するようになります。

次のコマンドで仮想環境を有効化できます。

source myenv/bin/activate

有効化すると、ターミナルのプロンプトが変わり、現在有効な環境が示されます。ターミナルは次のように表示されます。

(myenv) $

これで、グローバルのPython環境に影響を与えることなく、この環境にパッケージをインストールできます。

仮想環境へのPython 3のインストール

venvモジュールはPython 3.3以降に付属しているため、環境を作成するとPython 3が自動的にインストールされます。ただし、環境を作成する際に別のPythonバージョンを指定することもできます。たとえば、Python 3.7の環境を作成する場合は、次のコマンドを使います。

python3.7 -m venv myenv

インストールの確認

仮想環境にPython 3がインストールされていることを確認するには、次のコマンドを使います。

python --version

このコマンドを実行すると、環境にインストールされている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の例を紹介します。

FROM python:3.8

WORKDIR /app

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY . .

CMD ["python", "./your-python-script.py"]

このDockerfileでは、まずPython 3.8のイメージを指定します。次に、requirements.txtファイルをDockerイメージにコピーして、Pythonの依存関係をインストールします。その後、残りのコードをDockerイメージにコピーし、アプリケーションを実行するコマンドを指定します。

Dockerコンテナ内でPythonアプリケーションをビルドして実行する

Dockerfileを作成したら、docker buildコマンドでDockerイメージをビルドできます。

docker build -t your-python-app .

このコマンドはDockerfileからDockerイメージをビルドし、your-python-appという名前のタグを付けます。

Dockerコンテナ内でアプリケーションを実行するには、docker runコマンドを使います。

docker run -p 8000:8000 your-python-app

このコマンドは、Dockerコンテナ内でアプリケーションを実行し、コンテナのポート8000をマシンのポート8000にマッピングします。

SnykでPython Dockerアプリケーションを安全に保つ方法

Snykは、Dockerイメージのセキュリティ脆弱性を検出して修正するためのツールです。CI/CDパイプラインに統合することで、デプロイ前にDockerイメージの安全性を確認できます。

Snykを使うには、まずインストールします。

npm install -g snyk

次に、Dockerイメージの脆弱性をテストします。

snyk test --docker your-python-app:latest --file=Dockerfile

このコマンドは、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を利用することで、利用規約およびプライバシーポリシーを含む各種ポリシーに同意したものとみなされます。

続きを読む

feature insights context
Blog

自律型攻撃はすでに始まっている。防御もそのスピードに追いつかなければならない。

自律型攻撃者によって、防御に使える時間は短くなっています。継続的な検出、修復、検証、予防で、セキュリティチームが攻撃に歩調を合わせる方法をご紹介します。

feature insights context
Blog

予防は、本質的に解決済みの問題なのでしょうか?

エージェントが生成するコードの予防策はアーキテクチャ上解決されていますが、開発を遅らせることなくセキュリティを守る制御を選ぶことが、依然として課題です。

Live Stream

修正エージェントをわかりやすく解説:見つけるより直すことが重要な理由

SnykのRemediation Agentが、セキュリティインテリジェンス、破壊可能性分析、検証を活用して、脆弱性をマージ可能なプルリクエストに変える仕組みをご覧ください。