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を愛用