Pythonの仮想環境のディレクトリ位置を変更後 pipやaccelerate コマンドを実行すると "Fatal error in launcher: Unable to create process using '(旧パス)' " エラーが発生する

Pythonの仮想環境のディレクトリ位置を変更後 pipやaccelerate コマンドを実行すると "Fatal error in launcher"エラーが発生する現象と対処法を紹介します。

現象

Pythonの仮想環境の実行ディレクトリを変更後に、仮想環境に切り替えて、pipコマンドや、accelerate コマンドを実行すると以下のエラーが発生します。
エラーメッセージ
Fatal error in launcher: Unable to create process using '"(旧パス)\python.exe" "(実行した pip.exe や accelerate.exe のパス)"


原因

pipやその他のexeファイルが実行するpythonのパスはインストール時にバイナリ内に組み込まれます。 ディレクトリの位置が変化したのちにpipや仮想環境のScriptディレクトリ内のexeファイルのコマンドを実行すると、 バイナリ内に埋め込まれた旧仮想環境のパスのpython.exeを実行しようとし、python.exeが見つからずにエラーとなります。

対処法1: 仮想環境を再インストールする

venvディレクトリを削除し、再度、python -m venv venv コマンドを実行し、仮想環境を再インストールする方法があります。
一番確実でおすすめの方法です。

対処法2: すべてのパッケージを再インストールする

すべてのパッケージを再インストールします。

初めに仮想環境に切り替え、以下のコマンドを実行して、pipを再インストールします。
python -m pip install --upgrade --force-reinstall pip

次に以下のpipコマンドを実行し、現在の仮想環境インストールされているパッケージのリストを取得します。
pip freeze > list.txt

出力された、list.txtを編集します。パッケージのインストール元がpipで対応していないGitHub経由のパッケージを削除します。

編集後、以下のコマンドを実行して、パッケージを再インストールします。
pip install --upgrade --force-reinstall -r list.txt

対処法3: 元の位置に戻す

移動をあきらめ元の位置のまま利用する方法です。

対処法4: venvディレクトリのみ旧パスに残す

venvディレクトリ内のpython.exeのみを旧パスに残しておく方法です。

対処法5: バイナリ内の実行パスを書き換える

pip.exe内に埋め込まれている旧パスのpython.exeのパスを書き換える方法です。
Scriptsディレクトリ内のすべてのexeファイルにパスが埋め込まれているため、exeファイルの数が多い場合はお勧めできません。

pip.exeを例にします。

拡張子をbinに変更します。


バイナリエディタで開きます。


exeファイルの末尾部分にパスが記述されている箇所があります。移動前の旧仮想環境のpython.exeのフルパスが記述されています。


パスを修正します。


ファイルを保存し、拡張子をexeに戻します。


仮想環境のpip.exeを上書きして置き換えます。


pipコマンドを実行してエラーが発生しないことを確認します。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2023-09-13
作成日: 2023-09-10
iPentec all rights reserverd.