2013-03-04 16 views
7

私は、インポートエラーを解決しようとしている夜の大部分を取り組んできました。Pythonは名前をインポートできません<class>

これはよくある問題ですが、これまでの質問は私の問題に完全には答えていません。

私はPyDevは(Eclipseプラグイン)、およびライブラリKivy(Pythonライブラリ)私はこのような設定ファイルの構造を持っている

を使用しています:

<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 

私はここで間違っていましたか?私はこのモジュール構造をあまりにも悪くしてしまったので、フォルダ構造全体の名前を変更しましたが、どうすればいいのかが分かります。

+3

[ImportError:名前Xをインポートできません](http://stackoverflow.com/questions/9252543/importerror-cannot-import-name-x) –

答えて

5

これは同じフォルダにあり、相対的なパッケージ名とにかくそうすることをお勧め):

from .engine import Engine 
+0

code.engineではありませんか?それは根本的な "コード"パッケージの中にあるので、それはもっと理にかなっていませんか? – MintyAnt

+0

自分のプロジェクトから物をインポートするときは、相対インポートを使用するのが一般的です。 –

+1

十分に公正です。私はちょうどそれを試みた、運、それは同じエラー、同じ行をスローします。 "名前エンジンをインポートすることはできません" – MintyAnt

1

あなたのコードディレクトリパッケージです。エラーメッセージから判断して、その上のディレクトリ、つまりC:\MyProjectがPYTHONPATHに存在することを確認します。

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

8

円形のインポートがあるようです。 engine.pymain_menu_widgetをインポートしていますが、main_menu_widgetからengineをインポートしています。

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

+1

Yay Python 2があなたに問題を伝える – mafrosis

関連する問題