2 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
我對(duì) source .env 的重要性感到困惑
source
就像其他語(yǔ)言中的“include”一樣工作,就像在 C 中一樣,它包含其他文件的內(nèi)容。source
只是解析來(lái)自其他文件的文本,就好像它會(huì)被輸入一樣。
為什么 Python 不訪問(wèn)這些變量,盡管這些變量可以從 bash 訪問(wèn)。
因?yàn)闆](méi)有導(dǎo)出變量,所以在創(chuàng)建python進(jìn)程的執(zhí)行環(huán)境時(shí),該環(huán)境中不包含該變量的值。
那么我如何輕松地導(dǎo)出 .env 文件中的所有鍵值變量呢?
添加
export
到文件中的每個(gè)變量.env
,或用于
set -a
導(dǎo)出所有變量,然后獲取文件,或者解析
.env
文件以提取變量名稱,并使用 設(shè)置每個(gè)變量的導(dǎo)出屬性export
。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
正如 KamilCuk 所說(shuō),source沒(méi)有必要“導(dǎo)出”。必須導(dǎo)出變量,而不僅僅是源,所以在我的例子中,我只需要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
并且添加到這一點(diǎn),當(dāng)我這樣做時(shí)export FOO=foo,這既分配又出口,但實(shí)際上如果你只是做下面的事情,你會(huì)創(chuàng)建一個(gè)沒(méi)有出口的 bash var。
$ FOO=foo
$ echo $FOO
foo
在這種情況下,它是assigned,但不是exported。Python 需要將其導(dǎo)出。
添加回答
舉報(bào)