Pythonの仮想環境について

仮想環境とは

Pythonパッケージをプロジェクトごとに独立した場所にインストールする仕組みです。

システム全体 (触らない)
├── Python 3.13
└── apt管理のパッケージのみ

~/unicorn-env/  ← 仮想環境
├── bin/python   ← この環境専用のPython
├── bin/pip
└── lib/
    └── unicornhat, RPi.GPIO, spidev ...

システムのPythonを汚さずに、好きなパッケージを入れられます。


なぜ Bookworm から必要になったか

Raspberry Pi OS Bookworm(2023年リリース)から、Debian のルールに従いシステムのPythonへの直接インストールが禁止されました。理由はOSが管理するパッケージと、pip でインストールしたパッケージが衝突してOSが壊れる事故が多発したためです。

〜 Bullseye まで          Bookworm 以降
─────────────────         ─────────────────────
pip install なんでもOK  →  仮想環境の中だけOK
(OSが壊れることも)       (OSは安全)

基本的な使い方

# 作成(初回一度だけ)
python3 -m venv ~/unicorn-env

# 有効化(ターミナルを開くたびに必要)
source ~/unicorn-env/bin/activate
# → プロンプトが (unicorn-env) pi@raspberrypi:~ $ に変わる

# この状態で pip install すると仮想環境内に入る
pip install unicornhat

# 実行
python unicorn_clock.py

# 無効化(仮想環境を抜ける)
deactivate

複数プロジェクトへの応用

プロジェクトごとに環境を分けられるのが最大のメリットです。

~/unicorn-env/     unicornhat 専用
~/flask-env/       Webアプリ用
~/ml-env/          TensorFlow用(バージョンが違っても衝突しない)

たとえば unicornhat は Python 3.9 が必要で、別のプロジェクトは Python 3.13 が必要、という場合も共存できます。


sudo と仮想環境の関係

今回ハマったのがこの点です。

# ❌ これは /usr/bin/python(システム)で実行される
sudo python unicorn_clock.py

# ✅ 仮想環境のPythonをフルパスで指定する
sudo ~/unicorn-env/bin/python unicorn_clock.py

sudo はセキュリティ上、ユーザーの PATH や仮想環境を引き継がないため、仮想環境を有効化していても素のPythonが呼ばれてしまいます。


よく使うコマンドまとめ

# 今の環境に何が入っているか確認
pip list

# 環境を別のPCに再現するためにリスト出力
pip freeze > requirements.txt

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

# 仮想環境を削除したいとき(フォルダごと消すだけ)
rm -rf ~/unicorn-env

zero

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です