本記事の内容をより正確に書くと「zsh (bash) が読み込まれたときに、カレントディレクトリにあるaliasやexportの書かれた設定ファイルを自動で読み込ませる」方法です。Python の仮想環境pipenvは新しいシェルを読み込むので、結果としてalias等を自動的に設定することができます。pipenv環境から抜けると仮想環境内の設定が無効になるため、素や他の環境に影響を与えません。簡単に実現できますが、pipenvを使っている人が少ないのかズバリの情報が見つからなかったのでまとめました。
Contents
環境
シェル: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ファイルを読み込みます (試してませんが、書式としては。(2025/07/02 訂正) Bash は上の書式が使えないので、以下の様にしてください。仮想環境内のファイルはbashでも同じ方法でイケるらしいです).bashrc.localとしています。
if [ -f .bashrc.local ]; then
source .bashrc.local
fipipenv のルートディレクトリに .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.localpipenvのやり方よりひと手間増えますが、これで一応同じ様な事ができます。
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

