【问题标题】:.env file in main.pymain.py 中的 .env 文件
【发布时间】:2021-02-15 05:20:56
【问题描述】:

我有

from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(), verbose=True)

在我的 main.py 文件中。 load_dotenv 返回 True。然后稍后在文件中我使用从其他文件导入的一些类方法。这些方法在我的 .env 文件中使用环境变量。我对一件事感到困惑。调试时,我可以通过以下方式访问变量:

os.getenv('API_KEY')

但是当我说的时候

print(os.getenv('API_KEY'))

来自除 main.py 之外的其他 .py 文件,它显示“无”。这是怎么回事?

好的,我已经隔离了正在发生的事情,这是一个 .py 文件,它有一个我从 main.py 调用的类

#This doesn't work
print(os.getenv('API_KEY'))

class C():
    def: met():
        #This works
        print(os.getenv('API_KEY'))

不知道为什么会这样?

【问题讨论】:

    标签: python dotenv


    【解决方案1】:

    下面是一个我希望显示您正在经历的行为的最小示例:

    # ./main.py
    from dotenv import load_dotenv, find_dotenv
    import os
    
    import helper  # executes all the code in helper.py, below
    
    
    load_dotenv(find_dotenv(), verbose=True)  # loads the .env file into the environment
    
    print(os.getenv('API_KEY'))  # WORKS!
    foo = helper.SomeClass().print_env()  # also works!
    
    # ./helper.py
    import os
    
    
    print(os.getenv('API_KEY'))  # FAILS!
    
    class SomeClass():
        def print_env():
            print(os.getenv('API_KEY'))
    

    这是有道理的,因为 import helper 上的评论。当您导入 python 模块时,它会立即执行该模块 in 中的所有代码。 由于您在运行 load_dotenv 之前运行导入,因此环境没有没有加载您期望的密钥。但是,当您将调用放入一个类时,当您实例化该类时,环境已经被填充。​​

    【讨论】:

    • 啊,我去测试一下。不过,这很有意义。我也知道这一点,但我想我的大脑刚刚停止工作哈哈。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2015-06-30
    • 2022-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多