2014-01-15 17 views
19

私は/ modelsというPython 3.3プロジェクトにディレクトリを持っています。pythonクラスファイルを同じディレクトリからインポートするには?

私main.pyから私は単にこれは私のアプリケーションからの素晴らしい作品私の__init__.py

__all__ = ["Engine","EngineModule","Finding","Mapping","Rule","RuleSet"] 
from models.engine import Engine,EngineModule 
from models.finding import Finding 
from models.mapping import Mapping 
from models.rule import Rule 
from models.ruleset import RuleSet 

from models import * 

を行います。

私は私が行うとき私engine.pyに私は、engine.pyにfinding.py

をインポートする必要があるように、別のモデルに依存モデル、持っている:from finding import Finding

私はエラーを取得しますNo Such Module exists

クラスBをファイルAから同じモジュール/ディレクトリにインポートするにはどうすればよいですか?

編集1: 明らかに私は:from .finding import Findingとこれが動作します。そして、以下の答えもこれを反映しているので、これは合理的に正しいと思います。私はファイルの命名を修正し、テストを別のディレクトリに移しました。今はスムーズに実行しています。ありがとう!

+0

使用しているのpythonのバージョンは何? – geoffspear

+0

私はPython 3.3を使用しています – Yablargo

+3

Python 3は暗黙の相対インポートを許可していません。 – geoffspear

答えて

29

Python 3を使用しているため、これらの相対的なインポートはできません(異なるパッケージの同じ名前のモジュール間で混乱を招く可能性があります)。

次のいずれかを使用します

from models import finding 

または

import models.finding 

または、おそらく最高:

from . import finding # The . means "from the same directory as this module" 
+5

私は最後のものは 'fromであるべきだと思います。インポートの検索 '(そうでなければ、Python 3.5では少なくとも私にとってはSyntaxErrorが呼び出されます)。 –

+0

私はそう思っています。ディレクトリ名をハードコードしないので、インポートの結果が優れています。また、別のモジュールを持つ可能な名前クラスもこのように回避されます – minhajul

関連する問題