はじめに
毎度のアクティベートが面倒なのと、最近のバージョンでは PDM のバグの影響で、Invoke-Expression (pdm venv activate)
を実行してもアクティベートされずに、ps1 ファイルのパスだけ返してくるのがストレスだったので、いっそのこと cd でアクティベートできるようにしてしまおうというのが最初のモチベーション。
Linux 系の記事は見つけたが、意外と PowerShell での設定の仕方がなかったので調べた。
とりあえず出来たので、メモ。
設定方法
PowerShell プロファイルの確認
以下で PowerShell プロファイルのパスを確認できる。
PowerShell
$PROFILE
対象のファイルをテキストエディタで開く。
(以下はサンプルとして NeoVim で開く例)
Powershell
nvim $PROFILE
スクリプトを記述する
Microsoft.PowerShell_profile.ps1
# Cd コマンドをカスタムするための関数を作成
function Set-LocationAndActivateVirtualenv {
# Path パラメーターを取得
param (
[string]$Path
)
# デフォルトのロケーション移動のふるまいを実行
Set-Location -Path $Path
# Virtualenv が存在するか確認して、アクティベート
if (Test-Path -Path ".\.venv\Scripts\Activate.ps1") {
& .\.venv\Scripts\Activate.ps1
} elseif ($Env:VIRTUAL_ENV) {
# 仮想環境に入っていると `VIRTUAL_ENV` 環境変数にパスが入っているので、
# それを確認して `deactivate` を実行。
deactivate
}
}
# cd コマンドのコールバックをオーバーライド
Set-Alias -Name cd -Value Set-LocationAndActivateVirtualenv -Option AllScope
因みに他の環境では?
以下のポストらが参考になる。
Unix Shell 系
direnv を使う系
よりシステマチックかつサードパーティに頼る場合はこっち。
まとめ
これで、cd
移動 + .venv\Scripts\Activate.ps1
を毎度入力する必要がなくなった。小ライフハック。
基本 .venv
を配置している個所にしか有効ではないが、基本的に .venv
は作業スペースのルートに配置するし、そこをルートとしての作業しかしないので、とりあえずはこれで問題ないという判断。
もし、.venv
以外の名前を付ける習慣がある場合は、このスクリプトを改造すればいいだろう。