できない.dev

Python venv が activate できない(Windows PowerShell)

PowerShell の実行ポリシーがスクリプト実行を禁じていると Activate.ps1 が走らない。
RemoteSigned に変更するか、cmd 用の activate.bat を使う。

#venv#activate#powershell#windows

公開:

要約

Windows で Activate.ps1 を実行できないのは、PowerShell の ExecutionPolicy が Restricted で ローカルスクリプトの起動を禁じているため。RemoteSigned に変更すれば動く。
スクリプトの拡張子をシェルに合わせる ことも忘れない。

よくある原因

  1. ExecutionPolicy が Restricted: 既定では PowerShell スクリプトが一切走らない
  2. シェルとスクリプトの不一致: cmd で Activate.ps1 を、PowerShell で activate.bat を呼んでいる
  3. 作成時 Python と参照 Python の食い違い: py -3.11 -m venv で作って python で activate しようとしている
  4. 環境破壊: .venv を別 OS に持ち込んだ/ディレクトリ名を変更した

解決策

1. ExecutionPolicy を RemoteSigned に

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

CurrentUser スコープなら管理者権限不要。
署名されていないリモート由来のスクリプトは引き続き拒否される。

2. シェルに合わせて呼び分け

# PowerShell
.\.venv\Scripts\Activate.ps1
:: cmd
.venv\Scripts\activate.bat
# Git Bash / WSL
source .venv/Scripts/activate

3. 同じ Python で作り直す

py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
python --version    # 3.11.x が出るはず

py ランチャーで使用バージョンを固定すると食い違いを防げる。

4. OS をまたぐ場合は作り直し

.venv の中身は OS と Python バージョンに依存する。
Linux で作った .venv を Windows にコピーしても動かないため、ターゲット OS で python -m venv し直す

この記事は役立ちましたか?