Импорт модуля, который импортирует другой модуль (ы) в Python

#python #import #module

#python #импорт #модуль

Вопрос:

В настоящее время я пытаюсь переписать старое приложение, и, во-первых, я хочу немного очистить структуру. Я столкнулся с проблемой импорта модулей, и я исчерпал несколько вариантов, найденных в Интернете, поэтому пришло время обратиться за помощью.

Соответствующая структура:

 root/
   __init__.py
   app.py
   interface/
      __init__.py
      darkMotive.py
      mainWindow.py
  

app.py

 import interface.mainWindow

if __name__ == "__main__":
    root = tk.Tk()
    main = mainWindow(root)
    title = root.title("app")
    main.pack(side="top", fill="both", expand=True)
    root.mainloop()
  

mainWindow.py

 import darkMotive
import tkinter as tk

class mainWindow(tk.Frame):
    def __init__(self, *args, **kwargs):
    [rest of the code]
  

darkMotive.py

 import tkinter as tk
[other classes definitions]
  

Моя проблема в том, что когда я пытаюсь запустить app.py , я получаю эту ошибку:

 Traceback (most recent call last):
  File "X:/x/xxx/app.py", line 2, in <module>
    import interface.mainWindow
  File "X:xxxxinterfacemainWindow.py", line 1, in <module>
    import darkMotive
ModuleNotFoundError: No module named 'darkMotive'
  

Но когда я запускаю mainWindow.py в одиночку это работает.
Что я делаю не так? Не могли бы вы указать мне правильное направление? Не следует ли импортировать модуль darkMotive с помощью MainWindow в app.py пространство имен?

Комментарии:

1. Вы можете попробовать from interface import darkMotive ?

2. @PythonSherpa Добавление вашего фрагмента в app.py это не решает проблему. Даже добавление его в MainWindow этого не делает. 🙁

Ответ №1:

Это не вписалось в комментарии, но можете ли вы попробовать следующее?

mainWindow.py

 from interface import darkMotive
  

app.py

 from interface.mainWindow import mainWindow
  

Вероятно, вы хотите переименовать mainWindow.py , потому что это противоречит имени класса.

Комментарии:

1. Я изменил имя класса и добавил ваш код — он работает. похоже, мне нужно больше узнать о модулях, но, возможно, я могу указать, что было не так (даже примерно)?

2. Конечно. Ваш app.py находится в корневом каталоге. mainWindow.py И darkMotive находится в интерфейсе. Итак, вы выполняете relative импорт. Об этом есть много хороших статей, просто попробуйте.

3. Спасибо, я рассмотрю это. 🙂