Ошибка при импорте, "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'
Структура проекта:
Код 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 шт):
Если я правильно понял, ваш файл 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
Надеюсь вам это поможет.
Задал тот же вопрос на Хабр Q&A. Там человек написал решение, цитирую:
Проблема в том, что ты пытаешься сделать бота и скриптом, и модулем. А импорт работает только одним способом. Я бы сказал, просто вынеси main в папку выше (ну или остального бота в подпапку). Тогда бот будет модулем, а главный скрипт - скриптом.
Не, ты, конечно, можешь в
__init__написать изврат в духеtry: from .wtf import stuff except ImportError: from wtf import stuffИ сделать в main
from __init__ import *Но не надо так делать. Пожалеешь потом.
В итоге решил перенести папку data в files.
