👻

venv仮想環境を有効にしてもデフォルト環境のライブラリしか使えない

2023/12/14に公開

結論

結論からいうと、私の場合、仮想環境を作成した後にフォルダを移動したことが原因だったので、元の場所に戻すと解決しました。

動作環境

  • Windows 10
  • Python 3.11.1

経緯と解決策

以前venvで作成した仮想環境をコマンドプロンプトから有効化したところ、仮想環境に導入していたはずのライブラリが使用できないようになっていました。

pip freezeでインストールされているライブラリを出力してみると、なんと仮想環境が無効になっているとき(デフォルト)の環境と同じになっていました。

調べてみるとこれは仮想環境のパスが正しく指定されていないために起きているようで、冒頭にも書いたように、一番簡単な解決方法は元の場所に戻すことでした。あるいは、仮想環境を作り直すのも選択肢です。
https://stackoverflow.com/questions/65390129/venv-activate-doesnt-not-change-my-python-path

余談

コマンドプロンプトで仮想環境を有効にするためのactivate.batを開くと、環境変数VIRTUAL_ENVの値が仮想環境を作成したときのパスになっています。これを現在(フォルダ移動後)の仮想環境のパスに書き換えてから仮想環境を有効にしてpip freezeを実行すると、Fatal error in launcher: Unable to create process usingで始まるエラーが出るようになりました。

これはpip.exeの中で読み込まれるパスがフォルダ移動前の値になっているのが原因のようで、解決策も含めてこちらの記事に詳しいです。
https://www.ipentec.com/document/python-error-fatal-error-in-launcher-unacle-to-create-process-using-old-path

ちなみに、私の環境ではPowerShellでも同様のエラーが出ました。PowerShellで仮想環境を有効にするためのActivate.ps1では、activate.batと異なり、VIRTUAL_ENVの値が自動的に仮想環境を有効化したときのパスになるので、デフォルトの環境が呼び出されることなく、上記のエラーが発生してしまうようです。

Discussion