2014-01-15 3 views
19

У меня есть каталог в моем проекте Python 3.3 под названием/models.Как импортировать файл класса python из того же каталога?

из моего main.py я просто сделать

from models import * 

в моем __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 

Это прекрасно работает из моего приложения.

У меня есть модель, которая зависит от другой модели, например, что в моем engine.py мне нужно импортировать finding.py

в engine.py, когда я делаю: from finding import Finding

Я получаю ошибку No Such Module exists

Как импортировать класс B из файла A в тот же модуль/каталог?

Edit 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. import find' (в противном случае SyntaxError будет поднят - по крайней мере, для меня на python 3.5). –

+0

Я полагаю, из. импорт лучше, потому что он не является жестким кодом имени каталога, также предотвращается любой возможный класс имен с другим модулем – minhajul

Смежные вопросы