1. ホーム
  2. python

PIPはランチャーでFatal errorが発生します。

2022-02-14 23:40:34

Windows のコマンドラインで pip install xxx installer と入力すると、ランチャーで致命的なエラーが発生します。

プロンプトは、pip.exeの起動時にランチャーが見つからなかったことを意味します。

実は、pip.exeはパッケージ化されたpyスクリプトで、実行すると自動的にpython.exeを呼び出して、内部のpyスクリプトを実行します。

このエラーは、おそらくpython.exeが見つからないということでしょう。

そこで、WinHEXを使ってScriptsディレクトリの下にあるpip.exeを開いて確認してみると、ファイルの末尾にあった重要なメッセージは。

くっそー、こいつpip.exeの中にpython.exeの絶対パス書いてるやんけー。

Windows用のpythonはクソ遅刻だ!

そんなpythonは完全にポータブルじゃない!

追記:システムの再インストール時に再インストールしないように、インストールしたpythonを他のディレクトリに詰め込みました。

グリーンソフトとして実行します。もちろん、環境変数にpythonディレクトリとScriptsディレクトリを追加してください。

そして、Scriptsディレクトリ以下のファイルを全て確認したところ、ほぼ全てのexeとpyのスクリプトにpython.exeの絶対パスが書かれていました!!!!

python.exeが環境変数に追加されたので、絶対パスを使う必要は全くないので、手動で相対パスに変更してみました。

以下の画像の通りです。

保存後、再度pip.exeを実行すれば、正常に動作します。

ちなみに、Scripts以下のファイルは全て同じように変更したので、基本的にはPortableのままです。

pythonを任意のフォルダに移動し、環境変数PATHに追加しても問題なく動作します。

また、pythonのコマンドラインツールとして、一時的に環境変数を追加するバッチコマンドを記述することもできます。

下記をpython_cmd.batとして保存するだけです。

@title Python
@set PATH=%PATH%%%~dp0%;
@set PATH=%PATH%%%~dp0%\Scripts;
@cmd /k

追記です。この絶対パスを検証するために、さらに何度かインストーラを使ってpythonのインストールを繰り返しましたが、同じでした。

ファイルの変更時間を見ればわかるように、Scripts以下のファイルはインストール中に動的に変更されました。

他のコアファイルはすべて2018年に変更されており、これらのファイルのみインストール日となっています。

インストール時にpython.exeのデッドインのパスを書き込んでいるため。

この操作の波には唖然としました