我正在尝试使用python-dotenv,但我试图传递的环境变量仍然是“无”。我在文件夹中有两个文件:.env& settings.py
我的.env文件中有以下内容:
TEST_VAR=jkh45k3j4h5k34j
我在settings.py中的相同文件夹中有以下内容:
import os
from dotenv import load_dotenv
load_dotenv()
test_var = os.getenv("TEST_VAR")
print(test_var)
运行python3 settings.py
时得到的输出是:
None
为什么我无法将变量传递给settings.py?
答案 0 :(得分:1)
您必须提供load_dotenv
import os
from dotenv import load_dotenv
# Get the path to the directory this file is in
BASEDIR = os.path.abspath(os.path.dirname(__file__))
# Connect the path with your '.env' file name
load_dotenv(os.path.join(BASEDIR, '.env'))
test_var = os.getenv("TEST_VAR")
print(test_var)
答案 1 :(得分:1)
我遇到了同样的问题。在我的代码中进行快速测试后,我注意到
from dotenv import load_dotenv
load_dotenv(".env")
没有正确加载 .env 文件(这就是它向环境变量返回 None 的原因)。该文件在同一目录中。
当使用 find_dotenv 而不是文件路径/名称时,效果很好。
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())
有关信息,find_dotenv 是一个自动查找 .env 文件的函数。
答案 2 :(得分:0)
import os
from dotenv import load_dotenv
### give the full path
path='/user/.../.env'
load_dotenv(dotenv_path=path,verbose=True)
test_var = os.getenv("TEST_VAR")
print(test_var)
答案 3 :(得分:0)
load_dotenv()
也应在没有指定路径的情况下工作,如here所述:“ load_dotenv
将从当前目录中名为.env的文件或其任何父目录中加载环境变量。从指定的路径开始。”无论如何,它对我或OP都不起作用。
就我而言,在代码中指定路径不是可行的选择,但我需要自动查找.env文件。长话短说,这可以做到:
load_dotenv(find_dotenv())