私は多くの同様のエラーを見てきましたが、私の特定の問題に適用できる解決策を見つけることができません。
PYTHONPATHにある Akismet module を使用しようとしていますが、インタラクティブインタープリターを起動すると、from akismet import Akismet
を実行すると(docstringが言うように)、次のようになります。エラー:
from akismet import Akismet
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name Akismet
PYTHONPATHが正しくグローバルに設定されている場合は完全に機能します(自分でテストしただけです)。
ドッペルゲンガー自身の質問に対する答えにもっと注意を向けたいと思います。このエラーが発生しました。状況は次のとおりです。
たとえば「strategy.py」というモジュールから関数/クラスXをインポートしようとしています。
残念ながら、strategyというpythonパッケージディレクトリも作成しました。つまり、「strategy」というディレクトリがあり、「strategy」ディレクトリに「____init___」というファイルが少なくとも1つあります。 .py '。
root folder\
strategy.py (contains function/class called X)
strategy\
__init__.py
次に、pythonパッケージディレクトリを作成したという事実を忘れて、ファイルstrategy.py
で定義されているクラスまたは関数を「ルート」ディレクトリにインポートしようとします。
from strategy import X
次に取得するのは、Python error: ImportError: cannot import name X
エラーです。
Doppelgangerが指摘しているように、実際の問題は、pythonインタープリターが、作成したパッケージディレクトリを優先し、パッケージディレクトリでXという名前のファイル/モジュールを検索して無視することです。実際のモジュールstrategy.py
、および実際に探している関数/クラスX。
これは、pythonパッケージのドキュメントを読んだ場合に期待し、望んでいることですが、私のように途中で気が変わった場合は、頭をかいてしまう可能性があります。
PYTHONPATHが本当に期待どおりであるかどうかを確認します。インタラクティブコンソールでこれを行うことにより:
In [1]: import sys
In [2]: print sys.path
akismet.pyは本当にそれらのフォルダーの1つにありますか?
パスに「akismet」ディレクトリを含むディレクトリが必要です。 'akismet'ディレクトリ自体を$ PYTHONPATHに追加したと思います。
あなたが書くとき:
from akismet import Akismet
Pythonは、検索パスのどこかでファイルakismet/Akismet.py
を開こうとします。
Akismet
がファイルで、akismet
がディレクトリであると仮定すると、これはすべてです。 akismet.py
ファイルがある場合、このファイルを含むディレクトリは$PYTHONPATH
にリストされている必要があります。
シンプル:
ここでアプリケーションを実行すると、準備が整います。
Ipythonインタープリター内でrun
コマンドを使用すると、ipythonがモジュールをインポートすることを常に忘れています。変更したモジュールは再インポートされないため、新しい変数や関数は見つかりません。これは 既知の問題 ipythonの場合です。
結論:モジュールをリロードしないため、run
の使用は避けてください。