(The following information applies only to Anaconda installations.). 基本的なアイデアはどの Python インストールにも適用されますが、問題に対処する正確な方法は異なります)
例えば、あなたが書いたすべての種類のクールな関数がある coolscript
という Python モジュールを書いたとします。 おそらく、あなたはそれをコンピュータのデスクトップに保存しました。 そして、Anaconda Navigator に行き、Spyder または Anconda 内の別のプログラムを起動し、
from coolscript import *
というコードの行でこれらの関数をインポートしようとした場合、残念ですがエラーが表示されます。
ModuleNotFoundError: No module named 'coolscript'
多くの原因が考えられますが、おそらく coolscipt.py
が存在するディレクトリが PYTHONPATH
に含まれていない、つまり、coolscipt.py
が存在しないためだと思われます。e., Python が必要なファイルを検索するためのファイルディレクトリのセットです。 PYTHONPATH
が何であるか、そしてそこに私たちのスクリプトが含まれているかどうか調べてみましょう。 Anaconda プロンプトを起動します。 Windows のスタートメニューや MacOS のランチャーアプリから直接行えるかもしれませんが、他の方法として、以下のスクリーンショットのように Anaconda ナビゲーターを起動してターミナルを起動することもできます。
さて、このコマンドを実行してあなたの PYTHONPATH
を見てみましょう:
python -c "import sys; print('\n'.join(sys.path))"
私の場合、新しい Anaconda3 をインストールした個人の Windows ベースマシンで以下の結果を得ることができます。
私のスクリプトがこれらのフォルダー(またはそれらのサブフォルダー)の1つにない限り、pythonからそれを呼び出すとき(またはファイルが存在するディレクトリでpythonを起動するとき)、完全パスを明示的に示さなければ、それはpythonによって見つけられなくなります。 理想的には、モジュールを適切にインストールすることで、この問題を回避したいものです。 もし、他の誰かが書いたコードモジュールであれば、conda
を使ってインストールするのが一番ですし、それができない場合は pip
や setup.py
ファイルを使ってインストールするのが一番です。 これらはまた、自分自身のコードのためのベストプラクティスです。
しかしながら、時には一時的または未完成のコードのための便利な「作業ディレクトリ」があると便利で、コードを呼び出すたびに python をそのディレクトリに移動したくないかもしれません。 この問題を解決する一つの方法は、好みのディレクトリを PYTHONPATH
に追加することです。
一時的に python にディレクトリを追加したい場合、スクリプトを実行するために使用している python ターミナルで次のコマンドを実行するだけです。
import syssys.path.append(r'/path/to/my/package')
ここで “/path/to/my/package” はあなたの python スクリプトファイルがあるフォルダーへのファイルに変更されるべきです。 この方法は、Python コンパイラのインスタンスを閉じるまでしか動作しません。
PYTHONPATH
に永久的にフォルダーを追加したい場合、site-packages
ディレクトリに .pth
ファイルを作成することにより、それを行うことができます。 上のスクリーンショットでは、site-packages
フォルダーに注目してください。 各 Anaconda インストールには、この名前のフォルダーがあるはずです。 そのディレクトリーに新しいテキストファイルを作成し、ファイル拡張子 .pth
を持つような名前を付けます(例えば、extrapythonfolders.pth
という名前のファイルでもかまいません)。 そのテキストファイルの中に、PYTHONPATH
に含めたいディレクトリを1行に1つずつリストアップします。 例えば、Windowsマシンでは、C:\myscripts
という行を追加することができます。 これらの新しいロケーションでファイルを保存して、Anaconda Prompt 上で以下のコマンドを再度実行してみて下さい:
python -c "import sys; print('\n'.join(sys.path))"
新しいディレクトリが含まれていることが分かるはずです(全てのソフトウェアで動作させるには、Anaconda を再起動しなければならないかも知れませんが)。 これで、ファイル構造のどこで python を開始したかに関係なく、そのディレクトリからモジュールをインポートしたり、コードを実行したりできるようになるはずです。