为了账号安全,请及时绑定邮箱和手机立即绑定

Python 忽略源 .env 文件

Python 忽略源 .env 文件

ABOUTYOU 2023-03-16 09:31:21
source .env尽管可以从 bash 访问这些变量,但我对 Python 不访问这些变量的意义和原因感到困惑。当我手动时export FOO=foo,Python 会看到环境,但当我source .env$ cat .env ENV=development$ echo $ENV$ echo $FOO$ source .env $ export FOO=foo$ echo $ENVdevelopment$ echo $FOOfoo$ python3Python 3.7.7 (default, Mar 10 2020, 15:43:27)[Clang 10.0.0 (clang-1000.11.45.5)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> import os>>> print(os.getenv("ENV"))None>>> print(os.getenv("FOO"))foo
查看完整描述

2 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

我对 source .env 的重要性感到困惑

source就像其他语言中的“include”一样工作,就像在 C 中一样,它包含其他文件的内容。source只是解析来自其他文件的文本,就好像它会被输入一样。

为什么 Python 不访问这些变量,尽管这些变量可以从 bash 访问。

因为没有导出变量,所以在创建python进程的执行环境时,该环境中不包含该变量的值。

那么我如何轻松地导出 .env 文件中的所有键值变量呢?

  • 添加export到文件中的每个变量.env,或

  • 用于set -a导出所有变量,然后获取文件,或者

  • 解析.env文件以提取变量名称,并使用 设置每个变量的导出属性export


查看完整回答
反对 回复 2023-03-16
?
呼唤远方

TA贡献1856条经验 获得超11个赞

正如 KamilCuk 所说,source没有必要“导出”。必须导出变量,而不仅仅是源,所以在我的例子中,我只需要export ENV=development在.env文件和源中。


注意在这种情况.env下第 2 行是不同的。


$ cat .env 

export ENV=development

$ echo $ENV


$ echo $FOO


$ source .env 

$ export FOO=foo

$ echo $ENV

development

$ echo $FOO

foo

$ python3

Python 3.7.7 (default, Mar 10 2020, 15:43:27) 

[Clang 10.0.0 (clang-1000.11.45.5)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import os

>>> print(os.getenv("ENV"))

development

>>> print(os.getenv("FOO"))

foo

并且添加到这一点,当我这样做时export FOO=foo,这既分配又出口,但实际上如果你只是做下面的事情,你会创建一个没有出口的 bash var。


$ FOO=foo

$ echo $FOO

foo

在这种情况下,它是assigned,但不是exported。Python 需要将其导出。


查看完整回答
反对 回复 2023-03-16
  • 2 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信