Как импортировать файл пакетом __init__.py

Рейтинг: 1Ответов: 2Опубликовано: 06.02.2023

Есть 2 дирректории:

Doctor_Bot/config/hidden.py

и

Doctor_Bot/bot_start/script.py

hidden.py:

token = 'Токен'

script.py:

from config.hidden import token
print(hidden.token)

Ошибка:

ModuleNotFoundError: No module named 'config'

Я понимаю что надо смотреть в сторону __init__.py, дабы сделать из папки пакет, но как правильно его применить я понять не могу.

Вот скриншоты самого кода и иерархии папок:

Ответы

▲ 0Принят

Python определяет пути для модулей в переменной path. Вам нужно добавить в path путь к родительской папке, откуда можно будет импортировать модуль config.

from sys import path
    
path.append(path[0].replace(path[0].split('\\')
           [len(path[0].split('\\')) - 1], ''))

from config.hidden import token
▲ 3

При вашей структуре файлов (все лежит в папке Doctor_Bot), чтобы все файлы друг к другу могли обращаться через импорт, сама папка Doctor_Bot должна считаться общим пакетом.

Тогда нужно заменить импорты, например, на относительные :

from ..config.hidden import token

или абсолютные, с указанием основного пакета:

from Doctor_Bot.config.hidden import token

И запускать вашего бота извне пакета через

python -m Doctor_Bot.bot_start.script

Но в этом случае удобнее было бы, чтобы папкой проекта была не сама папка Doctor_Bot, а папка на уровень выше. Для удобства запуска снаружи Doctor_Bot можно создать пусковой файл такого вида:

run.py

import Doctor_Bot.bot_start.script

Скриншот, в терминале первый запуск через "треугольник" в файле run.py, второй - просто через командную строку без пускового файла:

введите сюда описание изображения