【问题标题】:.env file always returning None using os.environ.get() and os.environ[].env 文件总是使用 os.environ.get() 和 os.environ[] 返回 None
【发布时间】:2022-01-26 04:45:43
【问题描述】:

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

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

BOT_TOKEN=someHiddenText
CLIENT_ID=anotherHiddenText
CLIENT_SECRET=anotherHiddenText

我已经尝试过:

print(os.environ.get('BOT_TOKEN'))
print(os.environ['BOT_TOKEN'])

这两种方法都返回 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

【问题讨论】:

    标签: python heroku environment-variables


    【解决方案1】:

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

    BOT_TOKEN="asdfghjkl" python script.py
    
    export BOT_TOKEN="asdfghjkl"; python script.py
    

    或使用 python-dotenv 之类的 python 库为您的项目获取环境配置:

    pip install python-dotenv
    

    然后你可以通过这样做来加载你的 .env 变量

    from dotenv import dotenv_values
    
    config = dotenv_values(".env")
    print(config["BOT_TOKEN"])
    

    【讨论】:

    • 您的 .env 文件中有中文/日文/等字符吗?你可以尝试传入一个编码参数:config = dotenv_values(".env", encoding="utf8")
    • 我认为我有一个错误,我怀疑 .env 文件包含一个不可见的字符。因为一旦我重新制作了 .env 文件,它就可以正常工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多