2015-09-30 3 views
0

вот фотография моей структуры каталогов:питона выпуск

parts.py 
machine/ 
    __init__.py 
    parts.py 

У меня есть каталог (пакет) называется машина

в нем есть __init__.py и parts.py

на том же уровне, что и машины, есть файл с именем parts.py

в parts.py, код выглядит следующим образом:

#parts.py 
class Parts(object): 
    pass 

в machine.parts код выглядит следующим образом

#machine.parts 
from parts import Parts 
class MachineParts(Parts): 
    pass 

Когда я пытаюсь импортировать machine.parts, я получаю сообщение об ошибке импорта. Я не хочу менять свою структуру каталогов. Как мне исправить это и сохранить хороший стиль PEP8?

+0

в machine.parts, что вы имеете в виду 'из частей импорта Parts' – praba230890

+0

спасибо! Я исправил опечатку – pepper

+1

Вы должны сделать весь пакет (добавив '__init __. Py' near' parts.py') и использовать абсолютный импорт, например 'from mypackage.parts import Parts'. – alexanderlukanin13

ответ

1

Вы должны сделать это пакет по добавление верхнего уровня __init__.py и предоставление значимого имени директорию верхнего уровня:

mypackage 
    __init__.py 
    parts.py 
    machine/ 
     __init__.py 
     parts.py 

Затем, используя абсолютный импорт:

#machine.parts 
from mypackage.parts import Parts 
class MachineParts(Parts): 
    pass 
0

Поскольку import поддерживает относительные импорта, попробуйте:

from ..parts import Parts 

Другим вариантом является использование абсолютного импорта:

from appname.parts import Parts 

Как уже упоминалось в How to import a Python class that is in a directory above?

+0

относительный импорт считается плохим стилем – pepper

+1

, но он является частью PEP328 - как этот плохой стиль? Именование файлов с тем же именем может считаться и плохим стилем ... запутанным для вашего коллеги-разработчика (см. «Parent_parts.py'?) – Incognos

+0

достаточно справедливо, я только не читаю, чтобы не использовать относительный импорт в google styleguide. Относительный импорт здесь не работает, хотя – pepper

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