1
2

PowerShell で cd したら Python 仮想環境 (venv/virtualenv) に入る設定

Last updated at Posted at 2024-07-02

はじめに

毎度のアクティベートが面倒なのと、最近のバージョンでは 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 以外の名前を付ける習慣がある場合は、このスクリプトを改造すればいいだろう。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2