.env 文件使用 os.environ.get() 和 os.environ[] 总是返回 None

Ste*_*ian 3 python heroku environment-variables

我正在尝试访问 .env 文件,但它总是返回 None,这是我的文件结构:

在此输入图像描述

在我的 .env 文件中,我写道:

BOT_TOKEN=someHiddenText
CLIENT_ID=anotherHiddenText
CLIENT_SECRET=anotherHiddenText
Run Code Online (Sandbox Code Playgroud)

我尝试过这样做:

print(os.environ.get('BOT_TOKEN'))
print(os.environ['BOT_TOKEN'])
Run Code Online (Sandbox Code Playgroud)

这两个方法都返回 None,那么我在这里做错了什么?任何回复将不胜感激!这也是错误消息,以防万一它有用。

(environment) PS C:\Users\Steven Kristian\Documents\Portfolio\Tohru> heroku local worker
[OKAY] Loaded ENV .env File as KEY=VALUE Format
11:48:10 worker.1   |  None
11:48:10 worker.1   |  None
11:48:10 worker.1   |  Traceback (most recent call last):
11:48:10 worker.1   |    File "app.py", line 16, in <module>
11:48:10 worker.1   |      TOKEN = os.environ['BOT_TOKEN']
11:48:10 worker.1   |    File "C:\Users\Steven Kristian\AppData\Local\Programs\Python\Python38\lib\os.py", line 673, in __getitem__
11:48:10 worker.1   |      raise KeyError(key) from None
11:48:10 worker.1   |  KeyError: 'BOT_TOKEN'
[DONE] Killing all processes with signal  SIGINT
11:48:10 worker.1   Exited with exit code null
Run Code Online (Sandbox Code Playgroud)

Jer*_*ark 5

os.environ 只能获取主机上定义的变量(如 HOME、USER 等),而不能从文件中获取。您可以在运行脚本之前设置/导出它们:

BOT_TOKEN="asdfghjkl" python script.py

export BOT_TOKEN="asdfghjkl"; python script.py
Run Code Online (Sandbox Code Playgroud)

或者使用 python-dotenv 这样的 python 库来获取项目的 env 配置:

pip install python-dotenv
Run Code Online (Sandbox Code Playgroud)

然后你可以通过执行以下操作来加载你的 .env vars

BOT_TOKEN="asdfghjkl" python script.py

export BOT_TOKEN="asdfghjkl"; python script.py
Run Code Online (Sandbox Code Playgroud)