为什么我必须使用 python-dotenv 才能将环境变量加载到 Python?
Why I have to use python-dotenv in order to load env variables to Python?
我正在尝试在 python 脚本中读取环境文件中的一些变量 myfile.env
:
LOCALHOST='1'
如果在我的 python 脚本中我只是 运行:
import os
print(os.environ)
它打印:
environ({'PATH': '....', 'HOSTNAME': '...', 'PYCHARM_HOSTED': '1', 'PYTHONUNBUFFERED': '1'})
但是在这些数组中我没有 LOCALHOST
变量。我发现我可以使用 python-dotenv
现在我看到它并且可以工作,但我不明白为什么我必须使用它,并且仅使用 os
模块加载它们是不可行的。
因为 .env 文件不是环境。
os.environ
从环境中获取数据,有些过于简单,它是操作系统为每个进程维护的 string-to-string (name-to-value) 映射,并由子进程继承。通常使用 shell 中的 export
语句将事物放置在那里 – 然后它们将被从该 shell 开始的所有进程继承 – 但还有其他方式。
.env
文件是 application-level 的东西;操作系统 not 知道它们并且它们 not 自动加载到环境中(因此 not 被 os.environ
选中)。这就是 python-dotenv 为您服务的。
我正在尝试在 python 脚本中读取环境文件中的一些变量 myfile.env
:
LOCALHOST='1'
如果在我的 python 脚本中我只是 运行:
import os
print(os.environ)
它打印:
environ({'PATH': '....', 'HOSTNAME': '...', 'PYCHARM_HOSTED': '1', 'PYTHONUNBUFFERED': '1'})
但是在这些数组中我没有 LOCALHOST
变量。我发现我可以使用 python-dotenv
现在我看到它并且可以工作,但我不明白为什么我必须使用它,并且仅使用 os
模块加载它们是不可行的。
因为 .env 文件不是环境。
os.environ
从环境中获取数据,有些过于简单,它是操作系统为每个进程维护的 string-to-string (name-to-value) 映射,并由子进程继承。通常使用 shell 中的 export
语句将事物放置在那里 – 然后它们将被从该 shell 开始的所有进程继承 – 但还有其他方式。
.env
文件是 application-level 的东西;操作系统 not 知道它们并且它们 not 自动加载到环境中(因此 not 被 os.environ
选中)。这就是 python-dotenv 为您服务的。