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

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

14.07.2020, 12:09. Показов 4345. Ответов 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
Сообщений: 937
14.07.2020, 12:15  [ТС]
Сделал скрин проекта. Т.е. есть маленький класс в папке (красный цвет) который нормально импортируется в файл (красный цвет), но когда я хочу импортировать класс побольше (желтый цвет) в файл на уровень выше (желтый цвет) вылезает ошибка не могу найти модуль красного цвета
Отсюда и вопрос как правильно это организовывается?
Миниатюры
Как правильно организовать структуру проекта (импорт модулей)?  
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
14.07.2020, 14:46  [ТС]
Сделал небольшой пример. Как исправить ошибку при импорте модуля report при запуске GUI.py?
Вложения
Тип файла: zip GUI_TST.zip (4.0 Кб, 5 просмотров)
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 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
Сообщений: 937
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
Сообщений: 937
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
2695 / 1601 / 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru