使用 dotenv python 时环境变量显示为“无”

问题描述 投票:0回答:5

我正在尝试使用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?

python python-3.x environment-variables
5个回答
22
投票

您必须提供

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)

8
投票

我也有同样的问题。在我的代码中快速测试后,我注意到

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 文件的函数。


3
投票

load_dotenv()
也应该在没有指定路径的情况下工作,如here所述:“
load_dotenv
将从当前目录或其任何父目录中名为.env的文件或从指定的路径加载环境变量。”无论如何,它对我或 OP 不起作用。

就我而言,在代码中指定路径不是一个可行的选择,但我需要自动查找 .env 文件。长话短说,这可以完成工作:

load_dotenv(find_dotenv())

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)

0
投票

我知道这篇文章很旧,但是如果有人碰巧在这里并且 dotenv 仍然返回“无”。 试试这个:

示例.ev

API_KEY=abcdeFGHIJ123456

主.py

from dotenv import load_dotenv
import os

load_dotenv('example.env')

print(os.getenv('API_KEY')

输出:

abcdeFGHIJ123456

这应该有效。

© www.soinside.com 2019 - 2024. All rights reserved.