Ошибка ключа с os.environ [] доступом к переменной из файла .env

#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 запущено.

Надеюсь, это поможет!

——Источник—-