#python #slack-api #pathlib #python-os
#python #slack-api #pathlib #python-os
Вопрос:
Я пытаюсь создать slackbot и извлечь токен slack из отдельного файла .env. Когда я запускаю его, я получаю сообщение об ошибке, которое выглядит следующим образом:
raise KeyError(key) from None
KeyError: 'SLACK_TOKEN'
Код для бота (ShoppingListBot.py ) находится здесь:
import slack
import os
from pathlib import Path
from dotenv import load_dotenv
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
client = slack.WebClient(token=os.environ["SLACK_TOKEN"])
Код для файла .env (.env) находится здесь:
SLACK_TOKEN="xoxb-1691324762768-1693412284260-RdP0ZQUaQxD9j9mtLlwfNMbD"
Ответ №1:
Вместо os.environ["SLACK_TOKEN"]
этого вы должны использовать os.getenv("SLACK_TOKEN")
.
Из документов (курсив мой):
Это сопоставление фиксируется при первом импорте модуля ОС, обычно во время запуска Python как части обработки site.py . Изменения в среде, внесенные по истечении этого времени, не отражаются в os.environ, за исключением изменений, внесенных путем непосредственного изменения os.environ.
Или использовать override=True
в load_dotenv()
Комментарии:
1. Спасибо! os.getenv определенно был правильным решением, и он работал без ошибок!
2. getenv и environ эквивалентны. никакой разницы. цикл в исходном коде python.
3. Этот ответ решил проблему для меня, перед внесением этих изменений я получал ошибку heroku app log H10.
Ответ №2:
Обычно я использую файлы YAML, но, похоже, вам следует использовать os.getenv("SLACK_TOKEN")
не os.environ["SLACK_TOKEN"]
в соответствии с pip python-dotenv
Комментарии:
1. использование os.getenv() полностью исправило это для меня. Спасибо!
Ответ №3:
Не уверен, что у вас все еще есть эта проблема, но у кого-нибудь еще есть эта проблема — вот как я ее решил. примечание: я все еще учусь
Я создал .env
файл в том же каталоге с правильными значениями, затем написал следующее ‘app.py ‘
from http import client
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import os
from dotenv import load_dotenv
from pathlib import Path
load_dotenv()
#loading from .env file that was made
SLACK_BOT_TOKEN = os.environ['SLACK_BOT_TOKEN']
SLACK_APP_TOKEN = os.environ['SLACK_APP_TOKEN']
app = App(token=SLACK_BOT_TOKEN)
if __name__ == '__main__':
SocketModeHandler(app, os.environ['SLACK_APP_TOKEN']).start()
Перед запуском убедитесь, что вы зашли в папку установки python и также выполнили команду install certificates . Должен быть установлен для успешного взаимодействия с серверами.
Это было возвращено с подтверждением того, что приложение bolt запущено.
Надеюсь, это поможет!
——Источник—-