😸
Pythonの仮想環境を自動で切り替えるシェルスクリプト
はじめに
Pythonで開発をしていると、プロジェクトごとに異なる仮想環境(venv)を使用することが一般的です。しかし、ディレクトリを移動するたびに手動で仮想環境を切り替えるのは面倒です。今回は、ディレクトリの移動時に自動的に仮想環境を切り替えるシェルスクリプトを紹介します。
スクリプトの機能
- ディレクトリ移動時に自動的に仮想環境を検出
- 既存の仮想環境を非アクティブ化して新しい環境に切り替え
- カラー付きの分かりやすいステータス表示
- Bash/Zsh両対応
コード
function auto_activate_venv() {
# カラーコードの定義
local GREEN='\033[0;32m'
local YELLOW='\033[0;33m'
local NC='\033[0m' # No Color (リセット)
# 現在のvenv環境を非アクティブ化
if [[ -n "$VIRTUAL_ENV" ]]; then
local current_venv=$(basename "$VIRTUAL_ENV")
deactivate
echo -e "${YELLOW}Deactivated virtual environment: ${current_venv}${NC}"
fi
# venvディレクトリを探索
local venv_paths=("./venv/bin/activate" "./.venv/bin/activate" "env/bin/activate")
for venv_path in "${venv_paths[@]}"; do
if [[ -f "$venv_path" ]]; then
source "$venv_path"
echo -e "${GREEN}Activated virtual environment: $(basename $(dirname $(dirname $venv_path)))${NC}"
return
fi
done
}
# cdコマンドのオーバーライド
function cd() {
# 元のcdコマンドを実行
builtin cd "$@"
# 移動先のディレクトリでvenv環境をチェック
auto_activate_venv
}
# プロンプトの設定
if [[ -n "$ZSH_VERSION" ]]; then
# ZSH用の設定
setopt PROMPT_SUBST
PS1='${VIRTUAL_ENV:+($(basename "$VIRTUAL_ENV")) }'"$PS1"
else
# Bash用の設定
PS1='${VIRTUAL_ENV:+($(basename "$VIRTUAL_ENV")) }'"$PS1"
fi
セットアップ方法
- お使いのシェル設定ファイル(
.bashrc
または.zshrc
)に上記のコードを追加します。 - シェルを再起動するか、以下のコマンドを実行します:
# Bashの場合 source ~/.bashrc # Zshの場合 source ~/.zshrc
使用方法
セットアップ後は特別な操作は必要ありません。cd
コマンドでディレクトリを移動すると、自動的に以下が実行されます:
- 現在アクティブな仮想環境がある場合は非アクティブ化(黄色のメッセージで通知)
- 移動先のディレクトリで仮想環境を検索
- 仮想環境が見つかった場合は自動的にアクティブ化(緑色のメッセージで通知)
動作例
$ cd ~/projects/project-a
Activated virtual environment: venv
$ cd ~/projects/project-b
Deactivated virtual environment: venv
Activated virtual environment: .venv
カスタマイズ
メッセージの色を変更したい場合は、以下のカラーコードから選択できます:
BLACK='\033[0;30m'
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
WHITE='\033[0;37m'
まとめ
このスクリプトを使用することで、Pythonプロジェクト間の移動がよりスムーズになり、仮想環境の切り替えを意識する必要がなくなります。開発効率の向上に役立つはずです。
その他の記事紹介
これ以外にも以下のようなPythonの開発に役立つシェルスクリプトを紹介しています。
Discussion