1. ホーム
  2. python

[解決済み] "ImportError "です。Pythonスクリプトを実行しようとすると、「No module named」と表示される

2022-05-01 06:54:26

質問

Pythonスクリプトを起動するスクリプトを実行しようとしています。 ImportErrorが発生します。という名前のモジュールがありません。しかし、ipythonを起動し、インタプリタを通して同じ方法で同じモジュールをインポートすると、モジュールは受け入れられます。

何が起こっているのか、どうすれば解決できるのか? PythonがPYTHONPATHをどのように使用するかを理解しようとしましたが、私は徹底的に混乱しています。 どんな助けでも大いに感謝します。

解決方法は?

この問題は、コマンドラインのIPythonインタプリタがカレントパスを使用する方法と、別のプロセスが使用する方法の違いによって発生します。 (IPythonのノートブック、外部プロセスなど)。IPythonはsys.pathだけでなく、現在の作業ディレクトリにあるインポートするモジュールを探します。コマンドラインからインタプリタを起動する場合、あなたが操作しているカレントディレクトリは ipython を起動したディレクトリと同じです。もし、あなたが

import os
os.getcwd() 

を見れば、これが真実であることがわかるでしょう。

しかし、ipythonのノートブックを使っている場合、次のように実行します。 os.getcwd() で、現在の作業ディレクトリは ipython_notebook_config.py ファイルでノートブックが動作するように指示したフォルダになります(通常、ipython_notebook_config.py で c.NotebookManager.notebook_dir の設定)。

解決策は、あなたのモジュールへのパスを python インタープリタに提供することです。最も簡単な方法は、そのパスを sys.path リストに追加することです。あなたのノートブックで、まず試してみてください。

import sys
sys.path.append('my/path/to/module/folder')

import module_of_interest

もしこれがうまくいかない場合は、path-to-importとは関係ない別の問題が発生している可能性があります。

この問題を解決するためのより良い(そしてより永続的な)方法としては ピートンパス これは、python のパッケージやモジュールを探すための追加のディレクトリをインタープリタに提供するものです。PYTHONPATH をグローバル変数として編集または設定することは OS に依存します。 ユニックス または ウィンドウズ .