Задать вопрос
@Dzhigit
Начинающий прогер

Как пользоваться видимость пакетов Python?

Решил рассортировать сове приложение по пакетам, но возникла 1 проблема.
Допустим есть исполняемый файл main.py
Пакет с дополнениями test (file_1, file_2, __init__)
Внутри пакета с дополнениями есть еще 1 пакет с утилитами т.е. test/utils (utils, __init__)

Так вот:
.
└── src/
        ├── main.py
        └── test/
                └── __init__.py
                └── file_1.py
                └── file_2.py
                └── utils/
                        └── __init__.py
                        └── utils.py


В __init__ test импорт файлов 1 и 2 и всего его содержимого (*)
В __init__ utils импорт utils.py и всего его содержимого

file_2 будет использовать, чтото из первого, и естественно импортировать utils пакет

main импортирует file_2 из модуля test и получает ошибку (ModuleNotFoundError: No module named 'utils'), а в file_2 все хорошо работает.

Буду очень признателен, если объясните проблему. И как можно избежать данной ошибки.
  • Вопрос задан
  • 261 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Импорт модуля - это не вставка его кода в вызывающий модуль. Если сделать

import XXX

или

import YYY as XXX

то в текущей области видимости появится XXX, через который можно будет обращаться к содержимому другого модуля. В частности, можно обращаться к модулям, импортированным в нём:

import YYY as XXX
print (XXX.sys.argv)


Чтобы получить всё, что есть в модуле XXX, в текущей области видимости, можно сделать так:

from XXX import *

Но так импортируется реально всё, в том числе модули, которые импортированы в XXX. Но это можно обойти, если внутри XXX в переменной __all__ описать list со всеми именами, которые должны импортироваться при таком импорте. По умолчанию импортируется всё.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽