Python main.py中的.env文件

Python main.py中的.env文件,python,dotenv,Python,Dotenv,我有 在我的main.py文件中。load_dotenv返回True。然后在后面的文件中,我将使用从其他文件导入的一些类方法。这些方法在my.env文件中使用环境变量。我对一件事感到困惑。调试时,我可以通过以下方式访问变量: from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv(), verbose=True) 但当我说 os.getenv('API_KEY') 从main.py以外的其他.py文件中,它表示无

我有

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

from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(), verbose=True)
但当我说

os.getenv('API_KEY')
从main.py以外的其他.py文件中,它表示无。这是怎么回事

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

print(os.getenv('API_KEY'))

不确定我是否知道为什么会发生这种情况?

以下是一个最简单的示例,我希望它能显示您正在经历的行为:

#/main.py
从dotenv导入加载\u dotenv,查找\u dotenv
导入操作系统
导入助手#执行下面helper.py中的所有代码
load_dotenv(find_dotenv(),verbose=True)#将.env文件加载到环境中
打印(os.getenv('API_KEY'))#工作!
foo=helper.SomeClass().print_env()#也可以!

这是有意义的,因为
import helper
上的注释。导入python模块时,它会立即执行该模块中的所有代码。由于您在运行
load\u dotenv
之前正在运行导入,因此尚未使用您期望的密钥加载环境。但是,当您将调用放入一个类中时,在实例化该类时,环境已经被填充。

Ah,我将进行测试。不过这很有道理。我也知道这一点,但我想我的大脑已经停止工作了哈哈。谢谢
#This doesn't work
print(os.getenv('API_KEY'))

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


print(os.getenv('API_KEY'))  # FAILS!

class SomeClass():
    def print_env():
        print(os.getenv('API_KEY'))