スコルの知恵袋

主にプログラミング関係の気になったこと等をまとめたブログ

Anaconda Navigatorで「launch」ボタンをクリックしてもアプリが起動しない問題を解決した

タイトルの問題が私の環境で発生していたのですが,ごちゃごちゃしていたら解決したのでここにまとめておきます.

環境

  • Windows 10 Enterprise バージョン 1803
  • Anaconda Navigator 1.9.2

原因

私の場合はユーザーフォルダ名にマルチバイト文字(ひらがな,漢字など)が含まれていることが元凶でした. したがって,そうでない方はここで紹介する方法ではおそらく効果は無いでしょう.

解決法

最も良いのはユーザーフォルダ名をマルチバイト文字を使わないものに変更することですが,これには大変な苦労が伴うのでここではユーザーフォルダ名の変更を必要としない応急処置的な解決法を紹介します.

まず, Anaconda3\Lib\site-packages\anaconda_navigator\utilsにあるlaunch.pyを何かしらのエディタで開きます(行番号が表示されるものが良い).Anaconda3フォルダの場所は人によって異なりますが,ドライブ直下(C:\)に置いている方が多いのではないでしょうか.

次に,エディタで開いたlaunch.pyの203~209行目

cmd = (
    'chcp {CODEPAGE}\n'
    'call {QUOTE}{CONDA_ROOT_PREFIX}/Scripts/activate{QUOTE} '
    '{QUOTE}{CONDA_PREFIX}{QUOTE}\n'
    '{COMMAND} '
    '>{QUOTE_LOGS}{OUT}{QUOTE_LOGS} 2>{QUOTE_LOGS}{ERR}{QUOTE_LOGS}\n'
).format(

の中の\nをすべて\r\nに書き換え保存します.つまり,

cmd = (
    'chcp {CODEPAGE}\r\n'
    'call {QUOTE}{CONDA_ROOT_PREFIX}/Scripts/activate{QUOTE} '
    '{QUOTE}{CONDA_PREFIX}{QUOTE}\r\n'
    '{COMMAND} '
    '>{QUOTE_LOGS}{OUT}{QUOTE_LOGS} 2>{QUOTE_LOGS}{ERR}{QUOTE_LOGS}\r\n'
).format(

とします.

これでおしまいです.Anaconda Navigatorを開き(既に開いている場合は一度閉じてから開き直し)「launch」ボタンをクリックしてアプリが起動するかを確認してみてください.

プチ解説

Anaconda Navigatorは「launch」ボタンがクリックされるとアプリを立ち上げるためのバッチファイルを生成し実行します.そのバッチファイルにはユーザーフォルダ名が含まれるのですが,改行コードが LF でマルチバイト文字を含むバッチファイルを実行すると,一部の行の先頭数バイトが飛ばされて実行されるというバグがcmd.exeにあります.

例)

バッチファイル(改行コード:LF)

echo 1234
echo 56789
echo "こんにちは"
echo "ハロー!"

実際に実行されるコマンド

>echo 1234
>9
>ノちは"
>"ハロー!"

したがって,ユーザーフォルダ名にマルチバイト文字が含まれているとこのバグが発生してアプリを立ち上げるためのコマンドが正常に実行されず,「launch」ボタンをクリックしてもアプリが起動しない!!という現象が起きてしまうのです.

これは,改行コードを CR+LF に変更することで回避できるので,上の解決法のようにバッチファイルを生成するPythonスクリプト(launch.py)を編集し,生成されるバッチファイルの改行コードを CR+LF に変更することで問題は解決されます.

参考

Microsoftへのお願い

ユーザーフォルダ名を簡単に変更できるようにして!!!!たのむ!!!!!