main.py 中的 .env 文件

问题描述

我有

img {
  border: 20px solid black;
  border-image: url("xyzborderimage.jpg") 30 round;
  border-radius: 2px;
  height: 500px;
  width: 250;          
}

在我的 main.py 文件中。 load_dotenv 返回 True。然后在文件中我使用了一些从其他文件导入的类方法。这些方法在我的 .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
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 模块时,它会立即执行该模块中的所有代码。由于您在运行 load_dotenv 之前运行导入,因此环境尚未加载您期望的密钥。但是,当您将调用放入一个类中时,当您实例化该类时,环境已经被填充。​​