#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. Спасибо, я рассмотрю это. 🙂