我正在尝试使用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?
您必须提供
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)
我也有同样的问题。在我的代码中快速测试后,我注意到
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 文件的函数。
load_dotenv()
也应该在没有指定路径的情况下工作,如here所述:“load_dotenv
将从当前目录或其任何父目录中名为.env的文件或从指定的路径加载环境变量。”无论如何,它对我或 OP 不起作用。
就我而言,在代码中指定路径不是一个可行的选择,但我需要自动查找 .env 文件。长话短说,这可以完成工作:
load_dotenv(find_dotenv())
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)
我知道这篇文章很旧,但是如果有人碰巧在这里并且 dotenv 仍然返回“无”。 试试这个:
示例.ev
API_KEY=abcdeFGHIJ123456
主.py
from dotenv import load_dotenv
import os
load_dotenv('example.env')
print(os.getenv('API_KEY')
输出:
abcdeFGHIJ123456
这应该有效。