2 回答

TA貢獻1827條經驗 獲得超8個贊
我對 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 需要將其導出。
添加回答
舉報