web-dev-qa-db-ja.com

Pythonエラー:ImportError:名前Akismetをインポートできません

私は多くの同様のエラーを見てきましたが、私の特定の問題に適用できる解決策を見つけることができません。

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
12
Doppelganger

PYTHONPATHが正しくグローバルに設定されている場合は完全に機能します(自分でテストしただけです)。

  • ファイルパスではなく、「akismet.py」を含むディレクトリに設定する必要があります。相対パスを使用しないようにしてください。
  • すべてのプログラムに環境変数の変更を適用するには、再起動/ログオフが必要になる場合があることに注意してください。
6
AndiDog

ドッペルゲンガー自身の質問に対する答えにもっと注意を向けたいと思います。このエラーが発生しました。状況は次のとおりです。

たとえば「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パッケージのドキュメントを読んだ場合に期待し、望んでいることですが、私のように途中で気が変わった場合は、頭をかいてしまう可能性があります。

15

PYTHONPATHが本当に期待どおりであるかどうかを確認します。インタラクティブコンソールでこれを行うことにより:

In [1]: import sys

In [2]: print sys.path

akismet.pyは本当にそれらのフォルダーの1つにありますか?

4

パスに「akismet」ディレクトリを含むディレクトリが必要です。 'akismet'ディレクトリ自体を$ PYTHONPATHに追加したと思います。

あなたが書くとき:

from akismet import Akismet

Pythonは、検索パスのどこかでファイルakismet/Akismet.pyを開こうとします。

Akismetがファイルで、akismetがディレクトリであると仮定すると、これはすべてです。 akismet.pyファイルがある場合、このファイルを含むディレクトリは$PYTHONPATHにリストされている必要があります。

2
Jacek Konieczny

シンプル:

  1. Akismet(システム全体またはvirtualenv)がインストールされていることを確認してください
  2. pythonシェル)に貼り付け(akismetをインポート)して確認します
  3. プロジェクトのルートディレクトリにCDを挿入し、実行します(find。-nameakismet.py
  4. その名前のファイルを見つけたら、名前を変更できるかどうかを確認してください
  5. 次に、(find。-nameakismet.pyc-print0 | xargs -0 rm -rf)を実行します。

ここでアプリケーションを実行すると、準備が整います。

1
un33k

Ipythonインタープリター内でrunコマンドを使用すると、ipythonがモジュールをインポートすることを常に忘れています。変更したモジュールは再インポートされないため、新しい変数や関数は見つかりません。これは 既知の問題 ipythonの場合です。

結論:モジュールをリロードしないため、runの使用は避けてください。

0
david_adler