Skip to content

環境變數

Tip

如果你已經知道什麼是「環境變數」並且知道如何使用它們,你可以放心跳過這一部分。

環境變數(也稱為「env var」)是一個獨立於 Python 程式碼之外的變數,它存在於作業系統中,可以被你的 Python 程式碼(或其他程式)讀取。

環境變數對於處理應用程式設定(作為 Python 安裝的一部分等方面)非常有用。

建立和使用環境變數

你在 shell(終端機)中就可以建立和使用環境變數,並不需要用到 Python:

// 你可以使用以下指令建立一個名為 MY_NAME 的環境變數
$ export MY_NAME="Wade Wilson"

// 然後,你可以在其他程式中使用它,例如
$ echo "Hello $MY_NAME"

Hello Wade Wilson
// 建立一個名為 MY_NAME 的環境變數
$ $Env:MY_NAME = "Wade Wilson"

// 在其他程式中使用它,例如
$ echo "Hello $Env:MY_NAME"

Hello Wade Wilson

在 Python 中讀取環境變數

你也可以在 Python 之外的終端機中建立環境變數(或使用其他方法),然後在 Python 中讀取它們。

例如,你可以建立一個名為 main.py 的檔案,其中包含以下內容:

import os

name = os.getenv("MY_NAME", "World")
print(f"Hello {name} from Python")

Tip

第二個參數是 os.getenv() 的預設回傳值。

如果沒有提供,預設值為 None,這裡我們提供 "World" 作為預設值。

然後你可以呼叫這個 Python 程式:

// 這裡我們還沒有設定環境變數
$ python main.py

// 因為我們沒有設定環境變數,所以我們得到的是預設值

Hello World from Python

// 但是如果我們事先建立過一個環境變數
$ export MY_NAME="Wade Wilson"

// 然後再次呼叫程式
$ python main.py

// 現在就可以讀取到環境變數了

Hello Wade Wilson from Python
// 這裡我們還沒有設定環境變數
$ python main.py

// 因為我們沒有設定環境變數,所以我們得到的是預設值

Hello World from Python

// 但是如果我們事先建立過一個環境變數
$ $Env:MY_NAME = "Wade Wilson"

// 然後再次呼叫程式
$ python main.py

// 現在就可以讀取到環境變數了

Hello Wade Wilson from Python

由於環境變數可以在程式碼之外設定,但可以被程式碼讀取,並且不必與其他檔案一起儲存(提交到 git),因此通常用於配置或設定

你還可以為特定的程式呼叫建立特定的環境變數,該環境變數僅對該程式可用,且僅在其執行期間有效。

要實現這一點,只需在同一行內(程式本身之前)建立它:

// 在這個程式呼叫的同一行中建立一個名為 MY_NAME 的環境變數
$ MY_NAME="Wade Wilson" python main.py

// 現在就可以讀取到環境變數了

Hello Wade Wilson from Python

// 在此之後這個環境變數將不再存在
$ python main.py

Hello World from Python

Tip

你可以在 The Twelve-Factor App: 配置中了解更多資訊。

型別和驗證

這些環境變數只能處理文字字串,因為它們是位於 Python 範疇之外的,必須與其他程式和作業系統的其餘部分相容(甚至與不同的作業系統相容,如 Linux、Windows、macOS)。

這意味著從環境變數中讀取的任何值在 Python 中都將是一個 str,任何型別轉換或驗證都必須在程式碼中完成。

你將在進階使用者指南 - 設定和環境變數中了解更多關於使用環境變數處理應用程式設定的資訊。

PATH 環境變數

有一個特殊的環境變數稱為 PATH,作業系統(Linux、macOS、Windows)用它來查找要執行的程式。

PATH 變數的值是一個長字串,由 Linux 和 macOS 上的冒號 : 分隔的目錄組成,而在 Windows 上則是由分號 ; 分隔的。

例如,PATH 環境變數可能如下所示:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

這意味著系統應該在以下目錄中查找程式:

  • /usr/local/bin
  • /usr/bin
  • /bin
  • /usr/sbin
  • /sbin
C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32

這意味著系統應該在以下目錄中查找程式:

  • C:\Program Files\Python312\Scripts
  • C:\Program Files\Python312
  • C:\Windows\System32

當你在終端機中輸入一個指令時,作業系統會在 PATH 環境變數中列出的每個目錄查找程式。

例如,當你在終端機中輸入 python 時,作業系統會在該列表中的第一個目錄中查找名為 python 的程式。

如果找到了,那麼作業系統將使用它;否則,作業系統會繼續在其他目錄中查找。

安裝 Python 並更新 PATH

安裝 Python 時,可能會詢問你是否要更新 PATH 環境變數。

假設你安裝了 Python,並將其安裝在目錄 /opt/custompython/bin 中。

如果你選擇更新 PATH 環境變數,那麼安裝程式會將 /opt/custompython/bin 加入到 PATH 環境變數中。

它看起來大致會是這樣:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin

如此一來,當你在終端機輸入 python 時,系統會在 /opt/custompython/bin 中找到 Python 程式(最後一個目錄)並使用它。

假設你安裝了 Python,並將其安裝在目錄 C:\opt\custompython\bin 中。

如果你選擇更新 PATH 環境變數(在 Python 安裝程式中,這個選項是名為 Add Python x.xx to PATH 的勾選框——譯者註),那麼安裝程式會將 C:\opt\custompython\bin 加入到 PATH 環境變數中。

C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin

如此一來,當你在終端機輸入 python 時,系統會在 C:\opt\custompython\bin 中找到 Python 程式(最後一個目錄)並使用它。

因此,如果你輸入:

$ python

系統會在 /opt/custompython/bin找到 python 程式並執行它。

這大致等同於輸入以下指令:

$ /opt/custompython/bin/python

系統會在 C:\opt\custompython\bin\python找到 python 程式並執行它。

這大致等同於輸入以下指令:

$ C:\opt\custompython\bin\python

當學習虛擬環境時,這些資訊將會很有用。

結論

透過這個教學,你應該對環境變數是什麼以及如何在 Python 中使用它們有了基本的了解。

你也可以在環境變數 - 維基百科 (Wikipedia for Environment Variable) 中了解更多關於它們的資訊。

在許多情況下,環境變數的用途和適用性可能不會立刻顯現。但是在開發過程中,它們會在許多不同的場景中出現,因此瞭解它們是非常必要的。

例如,你在接下來的虛擬環境章節中將需要這些資訊。