1. はじめに
プロジェクトごとに依存ライブラリのバージョンを分離したいときに欠かせないのが 仮想環境 (virtual environment) です。本記事では、その核心コマンド source venv/bin/activate
を中心に、仕組みと実践手順をまとめます。
2. そもそも仮想環境とは?
- システム Python を汚さず、プロジェクトごとに独立した Python 実行環境を用意できる仕組み。
- ライブラリのバージョン衝突を防ぎ、再現性のある開発を実現。
- 標準モジュール
venv
だけで完結(追加ツール不要)。
3. source venv/bin/activate を徹底分解
3.1 コマンド構成と各引数の意味
断片 | 種類 | 詳細 |
---|---|---|
source | bash 組み込み | 後ろに続くスクリプトを “新しいシェルを起動せずに” 現在のシェルで読み込んで実行する。別名 . (ドット) でも可。引数: <script> [args…] 。activate スクリプトは追加引数を使わない。 |
venv/bin/activate | シェルスクリプト | python -m venv venv 実行時に自動生成。bash/zsh 用 (activate )、fish (activate.fish )、csh (activate.csh ) など複数が同ディレクトリに配置される。 |
🔍 種類列の補足
- bash 組み込み:
cd
,echo
,source
など Bash の内部実装コマンド。実行時に外部バイナリを探さず、呼び出し元シェルのプロセス内で直接動作するため 環境変数の変更が即座に反映 される。- シェルスクリプト: プレーンテキストで書かれた一連のコマンドを シェルが逐次解釈して実行 するファイル。
venv/bin/activate
自体がこれで、source
することでファイル内容が読み込まれ、PATH 変更などが行われる。📌 ポイント:
source
によって PATH や PS1 を書き換える処理が“呼び出し元シェル”に反映される。**source
によって PATH や PS1 を書き換える処理が“呼び出し元シェル”に反映される。
3.2 activate スクリプト内部で走るステップ
- 現在の環境をバックアップ
- 例:
export _OLD_VIRTUAL_PATH="$PATH"
など。
- 例:
VIRTUAL_ENV
を設定- 仮想環境のフルパス (
/home/user/project/venv
) を格納。
- 仮想環境のフルパス (
- PATH の先頭に
$VIRTUAL_ENV/bin
を追加- これにより
python
/pip
が venv 版に切り替わる。
- これにより
- プロンプト (
PS1
) に(venv)
を付加- 元の PS1 は
_OLD_VIRTUAL_PS1
に退避。
- 元の PS1 は
PYTHONHOME
が定義されていれば解除- システム Python との競合を防止。
deactivate
関数を定義- 1〜4 の変更をロールバックするワンステップ復帰用。
実際のスクリプトは約 100 行。
cat venv/bin/activate | less
で読めます。
3.3 実行後に変化する環境変数
変数 | 変更前 | 変更後 (例) |
PATH | /usr/bin:… | /home/user/project/venv/bin:/usr/bin:… |
VIRTUAL_ENV | (未定義) | /home/user/project/venv |
PS1 | user@host:~/project$ | (venv) user@host:~/project$ |
確認コマンド例:
1 2 3 |
echo $VIRTUAL_ENV which python # → venv/bin/python pip list # venv 内のパッケージ一覧 |
3.4 逆操作 deactivate
deactivate
を実行すると _OLD_VIRTUAL_PATH
や _OLD_VIRTUAL_PS1
が復元され、VIRTUAL_ENV
が unset されるため、システム Python に戻る。
3.5 より深い TIPS
- 他シェル対応: fish 用は
venv/bin/activate.fish
、csh 用はactivate.csh
。 - Windows: PowerShell では
venv/Scripts/Activate.ps1
を dot ソース (. ./venv/Scripts/Activate.ps1
) で実行。 - フック:
postactivate
/predeactivate
などを定義して自動処理も可能。 - 代替ツール:
pipx
,conda
,poetry env use
も同じ“プロジェクトごとに Python を分離”する思想。
4. WP-CLI 操作例
実践ステップ
1 2 3 4 5 6 7 8 9 10 11 |
# ① 仮想環境を作成(初回のみ) python3 -m venv venv # ② 有効化(毎回) source venv/bin/activate # (venv) が付く # ③ ライブラリをインストール pip install requests # ④ 無効化(作業終了時) deactivate |
5. トラブルシューティング
症状 | 原因と対処 |
source: command not found | zsh などでは source がエイリアス済み。. ドットでも可: . venv/bin/activate |
(env) が消えない | 他シェルを開いていると有効化状態が残る。deactivate で戻す。 |
pip install なのにシステム側に入る | venv が正しく有効化されていない。which python で PATH を確認。 |
6. まとめ
source venv/bin/activate
は “今のシェルをプロジェクト専用 Python に切り替えるスイッチ”。- PATH・PS1・環境変数を一括でセットし、ライブラリの管理を安全に行える。
- コマンドフローを覚えておけば、どの環境でも素早く開発をスタート可能。
🗒️ 用語解説(初心者向けミニ辞典)
用語 | 説明 |
システム Python | OS に最初から入っているグローバルな Python 実行ファイル。/usr/bin/python3 など。アンインストールや上書きは他ツールに影響するため注意が必要。 |
仮想環境 (virtual environment/venv) | プロジェクトごとに独立した Python 実行ファイル・ライブラリを持つディレクトリ。システム Python を汚さずに依存関係を分離できる。 |
PATH | コマンド検索パスを表す環境変数。: 区切りで複数パスを持ち、先頭にあるディレクトリほど優先される。 |
PS1 | Bash のプロンプト文字列を定義する環境変数。(venv) を付けるなど、現在の状態を視覚的に示す用途が多い。 |
VIRTUAL_ENV | 現在有効な仮想環境のディレクトリを指す環境変数。deactivate すると解除される。 |
PYTHONHOME | Python の標準ライブラリ検索パスを強制的に指定する変数。venv 有効化時は競合を防ぐため unset される。 |
bash 組み込み (builtin) | cd , echo , source など Bash 内部で実装され、外部バイナリを呼ばずに動作するコマンド。環境変数の即時変更が可能。 |
シェルスクリプト | .sh 拡張子などで書かれたテキストファイル。シェルが1行ずつ解釈して実行する一連のコマンド集。 |
dot source (. ) | source と同義の Bash 構文糖衣。スクリプトをカレントシェルに読み込む。 |
deactivate | venv が定義するシェル関数。PATH/PS1/VIRTUAL_ENV を元に戻し、仮想環境を終了する。 |
PowerShell | Windows 標準の高機能シェル。venv 有効化は venv\Scripts\Activate.ps1 を実行する。 |
fish / csh | Bash とは異なる別系統シェル。venv にはそれぞれ専用の activate.fish , activate.csh が生成される。 |
💡 使い方: 上記表を読みながら本文のキーワードを追うと理解が深まります。
コメント