Выглядит, будто всё должно работать. Но очевидно, что alembic не видит библиотеку. Я бы попробовал при помощи pkg_resources посмотреть, что видит python во время вызова через alembic. Других идей пока нет.
В коде подразумевается, что существует модуль (файл) dotenv.py в котором есть объект load_dotenv (очевидно, функция). Из скриншота этого не усматривается. Вероятно, надо либо создать его, либо где-то раздобыть и положить в src.
Если на блоке питания висит куча другого оборудования, включая супер мощную видеокарту, то такое может быть. У меня когда-то давным-давно было: 4 харда в 5 рейд собираю, перезагружаю - диск дегрейдед, один том не виден. Всё пересобираю, перезагружаю - дегрейдед.
Не хватало мощи бп. Один диск просто не стартовал из-за нехватки питания.
Тупо запитал пару хардов с другого БП и всё заработало. Потом докупил нормальный БП.
GARLIK2200, хорошо. Но обращаю ваше внимание на факт, что вопросы тут общедоступны и используются другими участниками для поиска вопросов, ответов и примеров. Так что оформляйте вопросы аккуратнее, тогда и общий вид ресурса будет приятнее глазу и полезнее всем.
Удачи!
Ну и я бы вообще не делал lines, если он у вас только для получения line.
with open('text.txt', 'r', encoding='utf-8') as file:
for line in file:
requests.post(f"https://discord.com/api/v9/channels/{channelID}/messages", headers = headers, json = {"content": line.strip()})
Тут тысячи раз приходили с этим вопросом, но главная проблема не в этом.
А в том, что вам не по уровню боты. Это кажется, что они простые.
Они весьма не простые для начинающих. И авторы роликов в ютьюбе врут нагло. Вам надо изучить много всего (язык, алгоритмы, ооп, базы данных, структуры данных, ну и на сладкое освоить асинхронность и многопоточность).
После этого будет достаточно знаний для ботов.
yonshou, кстати, есть альтернативный путь - делать update в лоб, без if, но обернув его в try с проверкой except на ошибку KeyError. В случае ошибки добавлять ключ. Таким образом относительно тяжелая операция if не будет дергаться всякий раз.
Кстати, я встречал, что разрабы python рекомендуют использовать try/except в подобных примерах, как pythonic way. Это спорно, но имеет право на существование.
во-первых, выполнить этот код не получается, т.к. кое-где заблокирован интернет-ресурс, отваливается по тайм-ауту;
во-вторых, это, конечно, не минимальный вариант. В минимальном варианте надо повыкидывать всё лишнее, оставить только фрагмент про словари, и обвесить его входящими данными и выводом. Мне лично лень это делать, если тебе надо - ты сделай, тогда может найдется кто подскажет.
Ну и в-третьих, раз код становится большим, имеет смысл его разделить, выделить функции и каждую функцию можно будет отдельно допиливать. Грубо говоря - код делает это и то и то и еще вот это. На каждое то и это делаем свою функцию, и вызываем их из main в нужном порядке, передавая аргументы и получая результаты работы. Короче, раз код сложный и начинает путать педали, пора рефакторить.