Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939

Как правильно организовать структуру проекта (импорт модулей)?

14.07.2020, 12:09. Показов 4425. Ответов 9

Студворк — интернет-сервис помощи студентам
Доброго дня! Как правильно организовать структуру проекта (импорт модулей)?

Например я создал папку calc_liquid_fire в которой создал файл class_liquid_fire.py где написал класс Liquid_fire. Вот что бы использовать эту папку как модуль в ней рядом создаю файл __init__.py где прописываю
Python
1
from .class_liquid_fire import Liquid_fire
Потом рядом с папкой я создаю файл class_report.py где что бы использовать класс Liquid_fire из папки calc_liquid_fire я прописываю:
Python
1
from calc_liquid_fire import Liquid_fire
Вот до этого момента все работает

А вот теперь возникла ситуация, что мне из class_report.py потребовался класс который работает на основе Liquid_fire (ну то есть я опять создал __init__.py и пр.), но он мне пишет что ModuleNotFoundError: No module named 'calc_liquid_fire '
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.07.2020, 12:09
Ответы с готовыми решениями:

Как правильно организовать сборку проекта из нескольких модулей
Hello world! Предположим у нас есть N проектов, все они лежать в root папке. root/ module1/CMakeLists ( exe ) module2/CMakeLists...

Как правильно организовать структуру папок на хостинге?
вопрос возник вот откуда: создаю личные странички для зарегистрированных пользователей, на эти личные странички посетители смогут загружать...

Как правильно организовать структуру приложения EJB
Вообщем по названию темы не совсем понятно что я имею в виду, поясню... Есть home-интерфейс EJB, есть Primary Key класс, есть...

9
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
14.07.2020, 12:15  [ТС]
Сделал скрин проекта. Т.е. есть маленький класс в папке (красный цвет) который нормально импортируется в файл (красный цвет), но когда я хочу импортировать класс побольше (желтый цвет) в файл на уровень выше (желтый цвет) вылезает ошибка не могу найти модуль красного цвета
Отсюда и вопрос как правильно это организовывается?
Миниатюры
Как правильно организовать структуру проекта (импорт модулей)?  
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
14.07.2020, 14:46  [ТС]
Сделал небольшой пример. Как исправить ошибку при импорте модуля report при запуске GUI.py?
Вложения
Тип файла: zip GUI_TST.zip (4.0 Кб, 5 просмотров)
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
14.07.2020, 15:06
Лучший ответ Сообщение было отмечено Михалыч как решение

Решение

Я обычно оставляю __init__.py пустым.
Цитата Сообщение от Михалыч Посмотреть сообщение
Как исправить ошибку при импорте модуля report при запуске GUI.py?
Python
1
from .base_class import Flow_rate
Добавлено через 2 минуты
Я не плодил бы пакеты и создал бы такую структуру:

gui.py
report/
report/__init__.py
report/report.py
report/base.py

Ну да, тогда придётся писать чуть длиннее:
Python
1
from report.report import Report
Добавлено через 2 минуты
И судя по скриншоту, лучше так:

reports/
reports/__init__.py
reports/base.py
reports/calc_….py
reports/calc_….py
reports/calc_….py
1
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
14.07.2020, 15:21  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
from .base_class import Flow_rate
так он пишет другую ошибку:
Python
1
ModuleNotFoundError: No module named 'base_class'
Добавлено через 1 минуту
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
И судя по скриншоту, лучше так:
Согласен, спасибо!)

Добавлено через 9 минут
А если все-таки с такой структурой как в прикрепленном файле (.zip) или так никто не делает?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
14.07.2020, 17:26
Цитата Сообщение от Михалыч Посмотреть сообщение
А если все-таки с такой структурой как в прикрепленном файле (.zip) или так никто не делает?
Чем меньше создаете каталогов, тем меньше проблем. Много каталогов оправдывает себя только в больших сложных проектах, когда количество модулей исчисляется десятками и без разбиения на каталоги с ними сложно разбираться. В простых проектах лучше размещать все в одном каталоге.
Если в качестве обучения, то можно по разбираться со сложной структурой каталогов. Тема, для того, что бы освоить все тонкости, достаточно сложная, так как требуется тщательности в работе со структурой каталогов. У Лутца этой теме посвящена целая глава.

Добавлено через 4 минуты
Михалыч, Наиболее просто, это создавать дерево каталогов, где импортируемый модуль всегда находится ниже в дереве каталогов, чем вызывающая программа.

Добавлено через 5 минут
Михалыч, Может я путаю, но по моему кто то говорил, что в последних версиях питона файлы __init__.py уже не обязательны. Если конечно нет необходимости что то в них писать.
1
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
16.07.2020, 15:18  [ТС]
Не могу ссылку поставить в URL тэг =( Поэтому прикреплю так.



Добавлено через 7 минут
Решение не мое, подсказали stackoverflow:
GUI.py

Python
1
2
3
4
5
6
7
8
9
10
print("GUI.py")
 
from report.report  import Report       # report.py
  
 
report = Report()
 
flow_str = report.flow_str()
 
print(f'flow_str = {flow_str}')
report.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from report.base_class.calc_base import Flow_rate           # calc_base.py
 
print('report.py')
 
class Report:
    def __init__(self):                                           # +++
        self.flow = Flow_rate()                                   # +++
        
 
    def flow_str(self):                                           # +++ self !!!
#        flow = Flow_rate().flow_rate_liquid(diametr_hole = 200)
        flow = self.flow.flow_rate_liquid(diametr_hole = 300)     # 300
        flow_str = str(flow)+" Go!"
    
        return flow_str
calc_base.py

Python
1
2
3
4
5
6
7
8
9
10
print("calc_base.py")
 
class Flow_rate:
 
    def __init__(self, diametr_hole=2000):
        self.diametr_hole = diametr_hole
 
    def flow_rate_liquid(self, diametr_hole=200):
        flow_rate_liquid = diametr_hole * 2
        return flow_rate_liquid
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
16.07.2020, 15:25
Цитата Сообщение от Михалыч Посмотреть сообщение
Python
1
from report.report  import Report
Python
1
from если.ты.не.голубой.нарисуй.вагон.другой import вагон
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
16.07.2020, 21:07
Цитата Сообщение от Михалыч Посмотреть сообщение
Не могу ссылку поставить в URL тэг
Ссылку нужно скопировать в буфер обмена Windows с помощью сочетания клавиш Ctr+c . Затем здесь нажать кнопку "Вставить ссылку" и вставить ее из буфера нажав клавиши Ctr+v .
1
17.07.2020, 09:31  [ТС]

Не по теме:

Цитата Сообщение от Viktorrus Посмотреть сообщение
Ссылку нужно скопировать в буфер обмена Windows с помощью сочетания клавиш Ctr+c . Затем здесь нажать кнопку "Вставить ссылку" и вставить ее из буфера нажав клавиши Ctr+v .
Я не к тому что не знаю как вставить) А просто не получается вставить ссылку на stackoverflow, видимо тут нельзя на него ссылаться, потому что при вставке сама ссылка подменяется символами ***

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.07.2020, 09:31
Помогаю со студенческими работами здесь

Объясните, как правильно организовать структуру и выборку
Сразу предупреждаю, в базах не силен, объясняю как могу. Например имеется абстрактное устройство, будем называть классом Device и...

Как правильно организовать структуру хранения данных
Добрый день! Прошу совета по базам данных. есть задача логистики деталей со склада на участок и обратно. как правильно организовать...

Как правильно организовать код большого проекта на C++?
Все мы рано или поздно переходим тот рубеж, когда писать хелловорлды становится скучно и хочется создавать что-нибудь большое и крутое. Но...

Есть над чем подумать или как правильно организовать структуру БД
Кому по зубам такая задачка? Часть первая: Например у нас есть сущность "Товары". Данные о товарах парсятся из разных мест,...

Как правильно организовать структуру отправки заявок со страницы через форму
Здравствуйте. Организовал средствами html и css три таба. По нажатию на каждый всплывает форма с полями. Заполняешь форму, жмешь кнопку и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru