見出し画像

[AI基礎解説] 仮想環境ってなんだ? 〜venv編〜

前回のあらすじ:conda編読んだ?

conda編で仮想環境の重要性を語った。覚えてるか?

  • プロジェクトごとに独立した環境

  • バージョン地獄からの解放

  • 依存関係の競合を防ぐ

conda編では、AI・データサイエンス向けの重厚な環境管理ツールを紹介した。

でも、こんな声が聞こえてきそうだ:

  • 「condaって重くね?」

  • 「ディスク容量が...」

  • 「シンプルなツールが欲しい」

そんな君に朗報だ。venvという選択肢がある。

venvって何者?

venvモジュールは、軽量な「仮想環境」の作成をサポートし、それぞれが独立したPythonパッケージのセットをsite directoriesにインストールできる。

簡単に言うと:

  • Python標準搭載:Python 3.3以降に最初から入ってる。インストール不要

  • 軽量:必要最小限だけ。condaの数分の一の容量

  • シンプル:Python専用。他の言語とか考えない

  • 高速:起動も作成も速い

conda vs venv:再確認

項目 venv conda インストール 不要(Python標準) 必要 容量 軽い(数MB〜数十MB) 重い(数GB) 対応言語 Python専用 Python、R、C++など パッケージソース PyPI(pip) conda repo + PyPI 起動速度 速い やや遅い 依存関係解決 普通 超強力 学習コスト 低い やや高い

どっち使うべき?

  • Webアプリ、APIサーバー、スクリプト → venv

  • AI・機械学習、データサイエンス → conda

  • シンプルに済ませたい → venv

  • 複雑な依存関係 → conda

俺の使い分け:

  • Djangoアプリ → venv

  • ちょっとしたツール → venv

  • 深層学習プロジェクト → conda

  • NumPy/SciPyゴリゴリ使う → conda

venvの哲学:使い捨て文化

仮想環境は、破棄可能なものと見なされる。削除してゼロから再作成するのが簡単であるべき。環境内にプロジェクトコードを置いてはいけない。

これ、マジで重要。

venvのルール:

  1. 環境はいつでも作り直せる

  2. プロジェクトコードは環境の外に置く

  3. 環境をGitにコミットしない(.gitignoreに追加)

  4. 環境が壊れたら? → 削除して作り直せ

condaと同じ思想だな。

基本操作:まずは触ってみろ

環境作成

# 基本形
python -m venv myenv

# よくある命名(.venvは隠しディレクトリ)
python -m venv .venv

# 別のディレクトリに作成
python -m venv /path/to/myenv

仮想環境の一般的なディレクトリの場所は.venvで、これによりディレクトリはシェルで通常隠され、邪魔にならない名前になる。

命名のベストプラクティス:

  • .venv:プロジェクト直下に作る場合(おすすめ)

  • venv:これも一般的

  • env:短くていい

俺は.venv派。理由:

  • 隠しファイルだからlsで邪魔にならない

  • .gitignoreに書きやすい

  • 「ここに仮想環境あるよ」って意味が明確

【Windows】環境の有効化

# コマンドプロンプト
.venv\Scripts\activate.bat

# PowerShell
.venv\Scripts\Activate.ps1

PowerShellで「スクリプトの実行が無効」エラーが出たら:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

これで解決。

【Mac/Linux】環境の有効化

# bash/zsh
source .venv/bin/activate

# fish
source .venv/bin/activate.fish

# csh/tcsh
source .venv/bin/activate.csh

有効化されたか確認

有効化すると、プロンプトの先頭に環境名が表示される:

# 有効化前
$ 

# 有効化後
(.venv) $

さらに確認したいなら:

# Pythonのパスを確認(Mac/Linux)
which python
# /path/to/project/.venv/bin/python

# Pythonのパスを確認(Windows)
where python
# C:\path\to\project\.venv\Scripts\python.exe

環境の無効化

deactivate

これだけ。プロンプトから(.venv)が消える。

環境の削除

使い捨て文化を体現するぞ。

# Mac/Linux
rm -rf .venv

# Windows(コマンドプロンプト)
rmdir /s .venv

# Windows(PowerShell)
Remove-Item -Recurse -Force .venv

ディレクトリ消すだけ。超簡単。

パッケージ管理:pipを使いこなせ

venvの中では、pipが自動的に仮想環境内にパッケージをインストールする。

パッケージインストール

# 環境を有効化してから
(.venv) $ pip install requests

# 複数まとめて
(.venv) $ pip install numpy pandas matplotlib

# バージョン指定
(.venv) $ pip install django==4.2.0

# 最新版にアップグレード
(.venv) $ pip install --upgrade requests

インストール済み一覧

(.venv) $ pip list

または、より詳細な情報:

(.venv) $ pip freeze
# requests==2.31.0
# numpy==1.24.3
# pandas==2.0.3

pip freezeは後で重要になる。覚えとけ。

パッケージアンインストール

(.venv) $ pip uninstall requests

requirements.txt:環境の設計図

これがvenvの真骨頂。

requirements.txtとは?

プロジェクトに必要なパッケージのリスト。チーム全員が同じ環境を再現できる神ファイル。

作り方

# 現在の環境を出力
(.venv) $ pip freeze > requirements.txt

requirements.txtの中身(例):

Django==4.2.0
requests==2.31.0
numpy==1.24.3
pandas==2.0.3
Pillow==10.0.0

使い方

# 新しい環境でインストール
(.venv) $ pip install -r requirements.txt

一発で全パッケージがインストールされる。

実践シナリオ:チーム開発

# 開発者A(プロジェクト立ち上げ)
python -m venv .venv
source .venv/bin/activate
pip install django requests
pip freeze > requirements.txt
git add requirements.txt
git commit -m "Add requirements"
git push

# 開発者B(プロジェクトクローン)
git clone <repo>
cd <project>
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

これでチーム全員が同じ環境。美しい。

requirements.txtのバージョン指定テクニック

# 完全固定(推奨:本番環境)
Django==4.2.0

# 指定バージョン以上
Django>=4.2.0

# 指定バージョン未満
Django<5.0.0

# 範囲指定
Django>=4.2.0,<5.0.0

# 最新版(非推奨:再現性がない)
Django

ベストプラクティス:

  • 開発中:バージョン範囲指定でOK

  • 本番環境:pip freezeで完全固定

よく使うコマンド一覧:チートシート

# 環境作成
python -m venv .venv

# 環境有効化(Windows - cmd)
.venv\Scripts\activate.bat

# 環境有効化(Windows - PowerShell)
.venv\Scripts\Activate.ps1

# 環境有効化(Mac/Linux)
source .venv/bin/activate

# 環境無効化
deactivate

# パッケージインストール
pip install <package>

# バージョン指定インストール
pip install <package>==<version>

# アップグレード
pip install --upgrade <package>

# アンインストール
pip uninstall <package>

# インストール済み一覧
pip list

# requirements.txt作成
pip freeze > requirements.txt

# requirements.txtからインストール
pip install -r requirements.txt

# 環境削除(Mac/Linux)
rm -rf .venv

# 環境削除(Windows)
rmdir /s .venv

実践:Djangoプロジェクトを始める

リアルな使用例を見せてやる。

# 1. プロジェクトディレクトリ作成
mkdir myproject
cd myproject

# 2. 仮想環境作成
python -m venv .venv

# 3. 環境有効化
# Windows
.venv\Scripts\activate
# Mac/Linux
source .venv/bin/activate

# 4. pipアップグレード(お約束)
pip install --upgrade pip

# 5. 必要なパッケージインストール
pip install django
pip install python-decouple  # 設定管理
pip install psycopg2-binary  # PostgreSQL接続

# 6. Djangoプロジェクト作成
django-admin startproject config .

# 7. requirements.txt作成
pip freeze > requirements.txt

# 8. .gitignore作成(環境を除外)
echo ".venv/" >> .gitignore
echo "*.pyc" >> .gitignore
echo "__pycache__/" >> .gitignore
echo "db.sqlite3" >> .gitignore

# 9. Git初期化
git init
git add .
git commit -m "Initial commit"

完璧なスタート。

つまずきやすいポイントと対策

ケース1:「python: command not found」

Pythonがインストールされてない、またはPATHが通ってない。

対策:

# Python確認
python --version
# または
python3 --version

python3で動くなら、以降はpython3を使え:

python3 -m venv .venv

ケース2:有効化しても(venv)が表示されない

コマンドが間違ってるか、パスが違う。

対策:

# Windows - コマンドプロンプト
.venv\Scripts\activate.bat

# Windows - PowerShell
.venv\Scripts\Activate.ps1

# Mac/Linux
source .venv/bin/activate

source忘れるな(Mac/Linux)。

ケース3:「Activate.ps1 cannot be loaded」(Windows PowerShell)

スクリプト実行ポリシーの問題。

対策:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

ケース4:pipが古いって怒られる

WARNING: You are using pip version X.X.X; however, version Y.Y.Y is available.

対策:

pip install --upgrade pip

仮想環境内で実行すれば、その環境のpipだけアップグレードされる。

ケース5:グローバルにパッケージ入れちゃった

# 環境有効化してないのに
$ pip install django  # ← これヤバい

システム全体にインストールされる。

対策:

  1. 常に環境を有効化してからインストール

  2. プロンプトに(venv)が表示されてるか確認

  3. やらかしたら、グローバルからアンインストール:

# システムのpip
pip uninstall django

ケース6:requirements.txtからインストールが失敗

依存関係の問題、またはパッケージが見つからない。

対策1:一つずつ試す

# どこで失敗してるか確認
pip install -r requirements.txt -v

対策2:pip更新

pip install --upgrade pip

対策3:requirements.txt修正 古いバージョン指定があったら、範囲指定に変える:

# NG
numpy==1.19.5  # 古すぎて見つからない

# OK
numpy>=1.20.0,<2.0.0

ケース7:環境を別のマシンに移動したい

NG:環境ごとコピー 環境は本質的に移植不可能。環境を再作成する簡単な手段を常に持つべき。

OK:requirements.txtで再現

# 元のマシン
pip freeze > requirements.txt

# 新しいマシン
python -m venv .venv
source .venv/bin/activate  # または Windows用コマンド
pip install -r requirements.txt

.gitignore:環境をGitに入れるな

venvディレクトリはGitで管理しない。絶対に。

.gitignoreに追加:

# 仮想環境
.venv/
venv/
env/
ENV/

# Python関連
*.pyc
__pycache__/
*.pyo
*.pyd
.Python

# その他
.DS_Store
db.sqlite3
*.log

理由:

  • 環境はデカい(数十〜数百MB)

  • 再現可能(requirements.txtがあれば十分)

  • OS依存(WindowsとMacで中身が違う)

複数Pythonバージョンの扱い

システムに複数のPythonバージョンがインストールされてる場合。

特定バージョンで環境作成

# Python 3.11で作成
python3.11 -m venv .venv

# Python 3.9で作成
python3.9 -m venv .venv

# Windows(py launcherを使う)
py -3.11 -m venv .venv

環境のPythonバージョン確認

(.venv) $ python --version
Python 3.11.5

pip install -e:開発モードインストール

自分でパッケージ開発してる時に超便利。

# 通常インストール
pip install .

# 開発モード(editable)
pip install -e .

何が違う?

  • 通常:パッケージがsite-packagesにコピーされる

  • 開発モード:リンクだけ作られる。ソース編集が即反映

自作ライブラリ開発してる人は使え。

venvとvirtualenvの違い

たまに「virtualenv」って聞くだろ?混乱するよな。

venv:

  • Python 3.3+標準搭載

  • シンプル

  • Python専用

virtualenv:

  • サードパーティツール(pip install virtualenv)

  • 古いPython(2.7とか)にも対応

  • 高機能

結論: Python 3使ってるならvenv一択。わざわざvirtualenv入れる必要なし。

condaとvenvは共存できる?

できる。でも、同じプロジェクトで両方使うな。

NG:

# conda環境の中でvenv作る
conda activate myenv
python -m venv .venv  # やめろ

OK:

  • プロジェクトA:conda

  • プロジェクトB:venv

プロジェクトごとに決めろ。混ぜるな危険。

pipenvやPoetryは?

venv以外にも選択肢はある。

pipenv:

  • pip + venvを統合

  • Pipfileで管理

  • 依存関係解決が賢い

Poetry:

  • モダンなパッケージマネージャー

  • pyproject.tomlで管理

  • パッケージ公開も簡単

どれ使うべき?

  • 初心者 → venv(シンプルだから)

  • 中級者 → venv or Poetry

  • 大規模プロジェクト → Poetry

  • レガシープロジェクト → venv

俺の意見:venv覚えてから他を試せ。基礎が大事。

次のステップ

  1. 実際にvenv環境を作ってみる:読むだけじゃダメ

  2. requirements.txtを作る習慣:全プロジェクトで

  3. 環境を壊してみる:rm -rf .venvして再作成。使い捨て文化を体感

  4. チーム開発で使う:requireme nts.txt共有して環境統一

  5. DjangoかFlaskでアプリ作る:venvの真価を知る

まとめ:venvマスターへの道

venvの基本操作、お疲れ様。これで君も:

✅ venvが何か説明できる ✅ venv環境を作成・管理できる ✅ pipでパッケージ管理できる ✅ requirements.txtで環境を再現できる ✅ condaとvenvを使い分けられる ✅ チーム開発で環境を共有できる

仮想環境使わないでPython開発するのは、安全帯なしで高所作業するようなもん。マジで危ない。

venvの3原則:

  1. プロジェクトごとに環境作れ

  2. 環境は使い捨て

  3. requirements.txtで再現しろ

この3つ守れば、環境問題で悩むことは99%なくなる。

最初は面倒に感じるかもしれない。でも慣れたら、環境作成〜有効化〜インストールが5秒で終わる。

「動いてたコードが動かない」 「ライブラリのバージョンが合わない」 「他の人のマシンで動かない」

こういう地獄から解放される。それがvenvだ。

Pythonやるなら、仮想環境は必須スキル。今日からvenv使え。


参考リンク:


いいなと思ったら応援しよう!