2 回答
TA贡献1827条经验 获得超7个赞
我对 source .env 的重要性感到困惑
source
就像其他语言中的“include”一样工作,就像在 C 中一样,它包含其他文件的内容。source
只是解析来自其他文件的文本,就好像它会被输入一样。
为什么 Python 不访问这些变量,尽管这些变量可以从 bash 访问。
因为没有导出变量,所以在创建python进程的执行环境时,该环境中不包含该变量的值。
那么我如何轻松地导出 .env 文件中的所有键值变量呢?
添加
export
到文件中的每个变量.env
,或用于
set -a
导出所有变量,然后获取文件,或者解析
.env
文件以提取变量名称,并使用 设置每个变量的导出属性export
。
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 需要将其导出。
添加回答
举报