web-dev-qa-db-ja.com

Python名前<class>をインポートできません

インポートエラーを解決するために、私は一晩中取り組んでいます。

これは一般的な問題ですが、以前の質問で私の問題を完全に解決することはできません。

私はPyDev(Eclipseプラグイン)とライブラリーKivy(a Python library)を使用しています

次のようにファイル構造を設定しています。

<code>
    __init__.py
    main.py
    engine.py
    main_menu_widget.py

「コード」はEclipseフォルダー「MyProject」内にありますが、パッケージではないので含めていません。

ファイルは次のようになります。

main.py

# main.py
from code.engine import Engine

class MotionApp(App):
    # Ommited

engine.py

# engine.py
from code.main_menu_widget import MainMenuWidget

class Engine():
    # Ommited

main_menu_widget.py

# main_menu_widget.py
from code.engine import Engine

class MainMenuWidget(Screen):
    pass

詳細に受け取るエラーは次のとおりです。

 Traceback (most recent call last):
   File "C:\MyProject\code\main.py", line 8, in <module>
     from code.engine import Engine
   File "C:\MyProject\code\engine.py", line 6, in <module>
     from code.main_menu_widget import MainMenuWidget
   File "C:\MyProject\code\main_menu_widget.py", line 3, in <module>
     from code.engine import Engine

私がここで間違ったことは何か考えていますか?私はこのモジュール構造をめちゃくちゃにしたのでフォルダ構造全体の名前を変更しましたが、見た目が近いと思います...

9
MintyAnt

循環インポートがあるようです。 engine.pyからmain_menu_widgetをインポートしていますが、main_menu_widgetからはengineをインポートしています。

これは明らかにPythonで許可されていない循環インポートです。

10
Gaurav Kumar

同じフォルダーにあり、相対パッケージ名を使用します(とにかくそうすることをお勧めします)。

from .engine import Engine
5
Brian Dilley

コードディレクトリisパッケージ。その上のディレクトリ、つまりC:\MyProjectエラーメッセージから判断すると、PYTHONPATHにあります。

プロジェクトを選択し、マウスの右ボタンをクリックしてコンテキストメニューを開き、[プロパティ]を選択します。 PyDev-PYTHONPATHを選択し、そこからソースフォルダタブを選択します。上記のディレクトリが存在することを確認してください。それが押されていない場合はソースフォルダの追加を選択し、ダイアログから選択して[〜#〜] ok [〜#〜]を押します。

1
Nicola Musatti