Anaconda3で bad interpreter :Not such file or directoryが出た時の対処法と原因究明した話。


自分の環境

macOS Catalina version 10.15.5
Python3.8.5
Anaconda3
conda 4.9.2
anaconda Command line client (version 1.7.2)

エラー状況

エラーメッセージ
$ jupyter lab
-bash: /Users/+++/anaconda3/bin/jupyter:
/Users/***/opt/anaconda3/bin/python: bad interpreter:
No such file or directory

しばらくぶりに、Anacondaの環境でJupyter labを実行しましたが、上記のエラーが出てしまいました。
今回は、対処方法と原因を探ってみました。間違っていたらすみません!

なおJupyter labがわからない方は、Jupyter notebookと考えていただいても構いません。
おそらく今回のエラーにおいて、両者に大きな違いはありません。1

試したこと

同様の記事があった。

同様のエラーを解決させた記事があったので、そちらを試しました。
こちらの記事だと、html5libというライブラリに関してですが、自分の場合はAnaconda3自体が問題だったので、別の解決法を試しました。ズバリ、Anaconda3を再インストールしました。

解決法が知りたかった方は、以上で解決です。閲覧ありがとうございました。

もう少し深掘りしてみた。

再度今回のエラーメッセージを表示します。

エラーメッセージ
$ jupyter lab
-bash: /Users/+++/anaconda3/bin/jupyter:
/Users/***/opt/anaconda3/bin/python: bad interpreter:
No such file or directory

先ほどの記事では、原因がわからないとの記述があったので、自分なりに深掘りしました。

結果的には具体的な原因がわからなかったので、あくまで一例として考えてください。

結論としては、インストールしたAnaconda3を別のディレクトリへ移行したことが原因だったようです。
元々Anaconda3をインストールしていたディレクトリは \Users\ *** \optだったようです。

/Users/***/opt/anaconda3/bin/python:

そのため、上記のディレクトリにあるpythonファイルが見つからないというエラーが出ていました。2
しかし自分は、様々な理由でoptから移動させていました。

 /Users/+++/anaconda3/bin/jupyter:

移動先が、\Users\ +++だったのです。
jupyter labを実行するためには、macOSが \Users\ +++ \anaconda3\bin\jupyter を実行する必要があります。2

しかし \Users\ +++ \anaconda3\bin\jupyter を実行するには、
上記の \Users\ *** \opt\anaconda3\bin\python ファイルが鍵になっていることは確実です。
そこで自分のエディタで \Users\ +++ \anaconda3\bin\jupyter を開いてみました。
以下の一行目を見てください。

#!/Users/***/opt/anaconda3/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from jupyter_core.command import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

どうやら一行目のPathと実際のpythonファイルが異なる場所にあることで、今回のエラーが発生していたようです。つまり結論でも書いた通り、元々のAnaconda3インストールした際には、それぞれのライブラリは、移動前のディレクトリ \Users\ *** \opt にインストールされていました。

しかしAnaconda3をディレクトリ移動させたことによって、それぞれのライブラリに記載のPathと現在のディレクトリにズレが生じました。

インストール時のPath
/Users/***/opt/anaconda3/bin/python:
現在のPath
 /Users/+++/anaconda3/bin/jupyter:

このエラーを究明している際に、jupyterのファイルを現在のPath /Users/+++/anaconda3/bin/python へ書き換えてみました。するとjupyterはきちんと実行されました。3

先ほど紹介した同様のエラーを解決させた記事は、この方法では解決でした。しかし自分の場合は、これで解決しませんでした。この方法には、注意が必要です。なぜならAnaconda3に含まれる多くのライブラリは、それぞれ依存ライブラリが多数あります。

つまりjupyter labを実行するために必要な全てのライブラリのパスを変更する必要があります。全てのライブラリのディレクトリを書き換える根気がある方以外は、大人しくAnaconda3を再インストールしなおしましょう。(自分はつい再インストールしてしまいましたが、もしかしたらインストールしたディレクトリへ戻すだけでも大丈夫かもしれません。しかし試していないので自己責任でお願いいたします)

エラーメッセージ
$ jupyter lab
-bash: /Users/+++/anaconda3/bin/jupyter:
/Users/***/opt/anaconda3/bin/python: bad interpreter:
No such file or directory

自分の場合だと、Anaconda3は、 \Users\ +++ というディレクトリにありますので、これを、 \Users\ *** \opt に移動させていれば再インストールせずとも動いたはずです。

再インストールの方法に関しては、ご自身で調べてください。4
(需要があれば、後日まとめます)

以上です。軽い気持ちのファイル移動は命取りですね。ここまで大事になってしまいました。

最後に。

最後投げやりな感じですが、日を改めて忘却してしまう前に、備忘録としてまとめました。

この記事を書いているときに気付いたのですが、自分は参考にした記事を試していません。なぜなら実際は一行目のPathを見たときに、エラーメッセージと見比べて色々試してみたくなってしまったからです。興味の赴くままに、bashの環境変数を変更したり、direnv1の環境変数を変更してみたり、いじっていたら今回のこのような原因究明と名打つような仰々しい記事を書くような気づきを得ることができました。

しかしそもそも論として、おそらくほとんどの方は、わざわざAnaconda3の実行ファイルのディレクトリを変更したりしないと思います。自分はdirenvを用いた仮想環境構築を色々と試していたので、このようなエラーに遭遇しました。解決できて、よかったです。正直仮説が正しかったときは、楽しかったですね。

あ、このパートだけ特に解説せずに専門用語を使ってますが、ここまで読むようなモノ好きの方でしたら、自分で調べるでしょう。。。笑

どんなやつか興味を抱いたら、自己紹介ページをご覧ください。

皆さんも楽しいエンジニアライフを!

付録(Appendix)

Anaconda3のインストール
https://www.anaconda.com/products/individual#Downloads

以下の記事は、今回の方法では用いていませんが、今後のこの記事の編集用です。あくまで付録いうことでご容赦ください。

Anaconda3のアンインストール
https://weblabo.oscasierra.net/python-anaconda-uninstall-macos/

Anaconda3の環境変数の設定方法
https://timappleblog.com/2019path-anaconda/


  1. ここでは紹介していませんが、実際はdirenvで管理している仮想環境内での作業です。そのため実際の環境とは異なる危険性を孕むため、環境変数などの細かな記述は割愛しております。 

  2. ファイルはPythonで記述されていますが、MacのFinderで確認するとUnix実行ファイルとなっていましたので、ここではただのファイルとして記述しています。OSのことはわかりません。詳しい方、ぜひコメントください。 

  3. ここってPythonを習い始めたときは、おまじないって教わりました。今回のエラーがなければ、今後もおまじないだと思いこんでいましたね。他のおまじないも、様々なエラーを解決していくうちに魔法が解けていくのでしょう。 

  4. Anaconda3のインストールに限らずPython3のインストールは、Macの場合ハマりどころがたくさんあるので、検証なしに適当にまとめるのは危険なので一応付録をつけておくことで、お茶を濁します。