亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超8個贊

我對 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 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號