2016-09-16 2 views
1

Мой проект не организован таким образом:Нет модуль с именем «ххх» в моей корневой папке проекта

ezrename/ 
├── base/ 
├── Images/ 
└── shell 

Есть пустеет Инициализационные .py файлы в ezrename, базы и оболочки папки. Изображения - это только папка с ресурсами и ничего не имеет.

У меня есть модуль с именем ezrename/base/colors.py, который реализует класс Colors.

У меня есть модуль с именем ezrename/shell/baseshell.py, который реализует класс BaseShell и импортирует Colors.

from ezrename.base import Colors

Но я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "/home/devaneando/Development/ezrename/shell/baseshell.py", line 6, in <module> 
    from ezrename.base import Colors 
ImportError: No module named 'ezrename' 

Так что я решил попробовать

from ..base import Colors 

И получает

Traceback (most recent call last): 
    File "/home/devaneando/Development/ezrename/shell/baseshell.py", line 6, in <module> 
    from ..base import Colors 
SystemError: Parent module '' not loaded, cannot perform relative import 

Я понятия не имею, что я делаю неправильно. Может ли кто-нибудь объяснить, как работает импорт, и что я не делаю правильно?

ответ

0

Пути, я думаю, что моя идея была неправильной. Вы не можете импортировать из двух модулей, как я хотел, потому что импорт будет работать, только если сам модуль не был импортирован. То, что я хотел, невозможно.

вещий путь будет создать папку приложения без инициализации .py файла, импортировать пакет в подъезде приложения сценария и относительный импорт будет работать:

EzRename 
└──ezrename/ 
    ├── base/ 
    ├── Images/ 
    └── shell 

В EzRename, добавь application.py:

import ezrename

Если вы это сделаете, то относительный импорт из классов в оболочку и базу будет работать. Это был недостающий кусок

0

импорта Python будет работать сформировать корень вашего проекта, так что любой импорт в модулях в подкаталогах должны импортировать относительно этого

Так что, если вы работаете с основного модуля в ezrename/затем импорта в baseshell. р должен быть:

from base import colors

+0

Прикрепление фрагментов кода в обратных тактах 'отформатирует их как таковые - делает читателей более понятными. – drjimmie1976

+0

Спасибо за подсказку, сделаю. – Jeroanan

+0

Спасибо за ответ. –

0

Вы можете добавить ezrename/базу на путь питона, а затем просто импортировать цвет

например от ezrename/shell/baseshell.py

import os 
import sys 
shell_dir = os.path.dirname(os.path.realpath(__file__)) 
ezrename_dir = os.path.dirname(shell_dir) 
base_dir = os.path.join(ezrename_dir, "base") 
sys.path.append(base_dir) 
import Colors 
+0

Спасибо за ответ. –