Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939

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

14.07.2020, 12:09. Показов 4419. Ответов 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 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru