本記事の内容をより正確に書くと「zsh (bash) が読み込まれたときに、カレントディレクトリにあるalias
やexport
の書かれた設定ファイルを自動で読み込ませる」方法です。Python の仮想環境pipenv
は新しいシェルを読み込むので、結果としてalias
等を自動的に設定することができます。pipenv
環境から抜けると仮想環境内の設定が無効になるため、素や他の環境に影響を与えません。簡単に実現できますが、pipenv
を使っている人が少ないのかズバリの情報が見つからなかったのでまとめました。
環境
シェル:zsh
(bash
でもできるらしいですが未確認です)
Python 仮想環境:pipenv
手順
macOS でpipenv
を使うには、まずbrew install pipenv
でインストールします。簡単に仮想環境を作る手順はこんな感じです:
mkdir my_project # プロジェクトディレクトリを作る
cd my_project # プロジェクトディレクトリに入る
pipenv --python 3.11 # Python 3.11 が入った仮想環境を作る
pipenv shell # 仮想環境に入る。出るときは exit または ctrl + D
~/.zshrc に一文追加
自分のホームディレクトリにある.zshrc
に以下を追加します。コメント文は無くて構いません。
# カレントディレクトリに .zshrc.local ファイルが存在する場合は読み込む
[[ -f .zshrc.local ]] && source .zshrc.local
内容としては、&&
の左の部分が条件式で、カレントディレクトリに.zshrc.local
ファイルが存在しているか調べています。真であれば右のsource
コマンドが実行され.zshrc.local
ファイルを読み込みます (試してませんが、書式としてはbash
でも同じ方法でイケるらしいです)。
pipenv のルートディレクトリに .zshrc.local ファイルを書く
その仮想環境内でのみ有効にしたいalias
やexport
、その他.zshrc
に書けることはもちろん何でも書けます。とりあえず簡単なサンプルは以下の通りです:
alias t='time'
export HW="Hello, World!"
仮想環境に入り、試す
以下、実行例です:
$ pipenv shell # 仮想環境に入る
$ t # alias で登録した time コマンド
(time コマンドの実行結果が表示される)
$ echo $HW
Hello, World!
(export で登録した文字列が表示される)
仮想環境から出て、試す
以下、実行例です:
$ exit # または ctrl + D で仮想環境を抜ける
$ t
zsh: command not found: t
(t というコマンドはない)
$echo $HW
(空行が表示される)
注意点
GitHub 等に公開するプロジェクトでは.gitignore
に.zshrc.local
を忘れずに追加しましょう。
venv でもほぼ同様のことをする
Python の標準的仮想環境ツールvenv
では新たにシェルを読み込まれません。よって、別の方法で同様の事を実現します。
bin/activate
の最終行に以下を追加します。~/.zshrc
に書いたものと同じです。
# カレントディレクトリに .zshrc.local ファイルが存在する場合は読み込む
[[ -f .zshrc.local ]] && source .zshrc.local
pipenv
のやり方よりひと手間増えますが、これで一応同じ様な事ができます。
venv での違い、注意点
上記の方法では、シェルの再読み込みはせずに.zshrc.local
を読み込んでいるので、deactivate
でvenv
環境を抜けた後もエイリアスや環境変数が有効になっています。同一のターミナルで仮想環境を抜けた後も別の作業を続けることがよくあるという方は普段の環境変数などが上書きされている可能性があるので注意が必要です (ターミナルを閉じるのが手っ取り早い)。
なぜこんなことが必要だったのか
ボクは最近、mlx-lm.server
でサーバを立てて MLX 版 LLM を使うのですが、Ollama と違ってメモリが解放されない (メモリプレッシャーが高止まり状態になる) ことがちょいちょいあります。仕方が無いのでつど ctrl + C で止めて再度コマンドからサーバを立てるのですが、他のターミナルでコマンドを叩いていたりするとカーソルキーの上ですぐに呼び出せずストレスを感じていました。そこで、pipenv
の環境内でのみ有効なalias
を作れないかと思った次第です。
ネット上では想像したほど簡単にその方法が見つからず、ローカルの QwQ や Qwen3、ChatGPT にも相談しながら最終的には自分で解決方法にたどり着きました。それぞれの LLM に評価をお願いしたところ「すばらしい!」と褒めてくれたので、うれしくてブログにまとめました。わはは!
Image by Stable Diffusion (Mochi Diffusion)
この記事にどのような画像が合うのかイメージか浮かばず、とりあえずいろんな自転車のあるショールームを描いてもらいました。依頼内容も画像もこれが正解なのかいまだにわかっていませんけど。
Date:
2025年6月14日 19:47:15
Model:
realisticVision-v51VAE_original_768x512_cn
Size:
768 x 512
Include in Image:
showroom with different types of bycicles
Exclude from Image:
Seed:
1251791658
Steps:
20
Guidance Scale:
20.0
Scheduler:
DPM-Solver++
ML Compute Unit:
CPU & GPU