Ошибка при импорте, "ModuleNotFoundError: No module named *моя папка проекта*"

Visual Studio Code никаких ошибок не выдает, только Python при запуске main.py.

Текст ошибки:

Traceback (most recent call last):
  File "d:\Sarcandi\Python\SarOS Bots\saros_bot\main.py", line 5, in <module>
    import saros_bot
ModuleNotFoundError: No module named 'saros_bot'

Структура проекта:

1

Код main.py:

from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from asyncio import run
from logging import basicConfig, DEBUG, INFO, WARN, ERROR, CRITICAL
from saros_bot import test_bot_token as token, start_handler, comment_handler, clear_keyboard_handler, manage_db_handler, AntiFloodMiddleware

bot = Bot(token=token)
dp = Dispatcher()

async def start() -> None:
    dp.message.middleware(AntiFloodMiddleware())
    dp.message.register(start_handler, Command('start'))
    dp.message.register(manage_db_handler, Command('manage_db'))
    dp.message.register(clear_keyboard_handler, Command('clear_keyboard'))
    dp.message.register(comment_handler, F.chat.id == -1001234567890)
    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot)

if __name__ == '__main__':
    basicConfig(level=DEBUG)
    run(start())

Код __init__.py:

from saros_bot.data.secret_data import main_bot_token, test_bot_token, admins_id, SarcandiID, SarOS_Bot_News_id
from saros_bot.files.functions.database_functions import manage_db_function
from saros_bot.files.handlers.handlers import start_handler, comment_handler, clear_keyboard_handler, manage_db_handler
from saros_bot.files.keyboards.inline_keyboards import subscribe_SarOS_Bot_News_inline_keyboard, database_inline_keyboard
from saros_bot.files.keyboards.reply_keyboards import clear_reply_keyboard, main_menu_reply_keyboard
from saros_bot.files.middlewares.middlewares import AntiFloodMiddleware, CheckSubscriptionMiddleware

Ответы (2 шт):

Автор решения: Mixadyt

Если я правильно понял, ваш файл main.py находится в папке saros_bot. Если это так, то вам нужно импортировать модули напрямую из папки. Например:

было: from saros_bot.data.secret_data import main_bot_token, test_bot_token, admins_id, SarcandiID, SarOS_Bot_News_id

стало: from data.secret_data import main_bot_token, test_bot_token, admins_id, SarcandiID, SarOS_Bot_News_id

Надеюсь вам это поможет.

→ Ссылка
Автор решения: Sarcandi

Задал тот же вопрос на Хабр Q&A. Там человек написал решение, цитирую:

Проблема в том, что ты пытаешься сделать бота и скриптом, и модулем. А импорт работает только одним способом. Я бы сказал, просто вынеси main в папку выше (ну или остального бота в подпапку). Тогда бот будет модулем, а главный скрипт - скриптом.

Не, ты, конечно, можешь в __init__ написать изврат в духе

try:
    from .wtf import stuff
except ImportError:
    from wtf import stuff

И сделать в main from __init__ import * Но не надо так делать. Пожалеешь потом.

В итоге решил перенести папку data в files.

→ Ссылка