こんにちは、Tech Samuraiです!
これまでの冒険で、私たちはFlaskでWebアプリを作ったり、OpenCVで画像認識をしたりと、様々な外部ライブラリをpip install
で追加してきました。しかし、新しいプロジェクトを始めるたびに、何も考えずにライブラリを追加していくと、いつか必ず恐ろしい問題に直面します。
それは、**「依存関係地獄(Dependency Hell)」**です。
プロジェクトAではライブラリXのバージョン1.0が必要なのに、プロジェクトBではバージョン2.0が必要になる… このような状況は、開発の世界では日常茶飯事です。PC全体で一つの環境を共有していると、プロジェクトを切り替えるたびにライブラリを再インストールする羽目になり、やがては環境が壊れてしまいます。
今回のテーマは、この地獄を回避するための必須スキル、「仮想環境 (Virtual Environment)」です。その中でも、Pythonに標準で備わっている、全ての基本となる**`venv`**の使い方をマスターします!
なぜ仮想環境が必要なのか? – プロジェクトごとに「綺麗な道具箱」を
仮想環境を一言でいうと、**プロジェクトごとに独立したPython環境を「箱」のように作って分離する**仕組みです。
グローバル環境(PC全体の共通環境)に何でもインストールするのは、木工、配管、自動車修理の道具を、一つの巨大な道具箱にごちゃ混ぜに入れるようなものです。いつか必ず、違うサイズのレンチを手に取ってしまいます。
仮想環境を使えば、
- プロジェクトA用の「Web開発セット(Flaskなど)」
- プロジェクトB用の「データ分析セット(Pandas, NumPyなど)」
- プロジェクトC用の「画像認識セット(OpenCVなど)」
といったように、プロジェクトごとに専用の、クリーンな道具箱を用意できます。これにより、ライブラリ同士のバージョン衝突を完全に防ぎ、PC本体のPython環境を汚さずに済むのです。
実践!`venv`の使い方 4ステップ
`venv`はPythonに標準で付属しているので、追加のインストールは不要です。使い方を4つのステップで見ていきましょう。
ステップ1:仮想環境の作成
まず、プロジェクト用のフォルダを作成し、その中に`venv`という名前の仮想環境を作ります。
# プロジェクトフォルダを作成して、そこに移動
mkdir my-app-project
cd my-app-project
# "venv" という名前の仮想環境を作成
python3 -m venv venv
これを実行すると、カレントディレクトリに`venv`というフォルダが作られます。この中に、プロジェクト専用のPython実行環境一式が格納されます。
ステップ2:仮想環境の有効化(アクティベート)
作成した仮想環境に入るには、「アクティベート」というおまじないを唱えます。
# Linux / macOS の場合
source venv/bin/activate
# Windows (コマンドプロンプト) の場合
# venv\Scripts\activate
成功すると、ターミナルのプロンプトの先頭に`(venv)`という目印が付きます。これが、あなたがプロジェクト専用の「部屋」の中にいることの証明です。
ステップ3:パッケージのインストールと依存関係の記録
仮想環境が有効な状態で`pip install`したパッケージは、この`venv`フォルダの中にだけインストールされます。
(venv) $ pip install flask
# インストールしたパッケージとそのバージョンを記録する
(venv) $ pip freeze > requirements.txt
`requirements.txt`は、このプロジェクトで使っているライブラリとそのバージョンの一覧が書かれた「部品リスト」です。このファイルを他人に渡せば、pip install -r requirements.txt
というコマンド一つで、誰でもあなたの環境を完全に再現できます。
ステップ4:仮想環境の無効化(デアクティベート)
作業が終わって「部屋」から退出するには、以下のコマンドを実行します。
(venv) $ deactivate
プロンプトから`(venv)`の目印が消え、通常の環境に戻ります。
まとめ
今回は、Pythonで開発を行う上で、もはや常識とも言える「仮想環境」の重要性と、その基本となる`venv`の使い方を探検しました。
- 仮想環境は、プロジェクト間の**依存関係の衝突**を防ぐために不可欠である。
- `venv`は、**作成 → アクティベート → インストール → 記録 → デアクティベート**という流れで使う。
- `requirements.txt`ファイルを使えば、**誰でも同じ開発環境を再現**できる。
`venv`はシンプルで強力ですが、アクティベートを手動で行う必要があったり、Pythonのバージョン自体を管理する機能はなかったりと、少し手間がかかる部分もあります。
次回は、特にデータサイエンスの世界で一世を風靡した、仮想環境と多数のライブラリをまとめて提供するオールインワンパッケージ**「Anaconda」**を取り上げ、そのメリットと、私がなぜ特定のプロジェクトでAnacondaから離れることにしたのか、その実体験をお話しします。お楽しみに!
コメント