組態檔案處理

pip._internal.configuration 模組負責處理 pip 使用的組態檔案(例如從檔案載入和儲存值至檔案)。此模組的功能主要是透過模組的 Configuration 類別公開和協調。

注意

此文件區段目前撰寫中。pip 開發人員歡迎你協助完成此文件。如果你有興趣協助,請在 追蹤問題 中讓我們知道。

概述

pip 將組態檔案儲存在標準的操作系統合適位置,這些位置是由 appdirs 決定的。這些檔案採用 INI 格式,並使用 RawConfigParser 處理。

pip 在兩個操作中使用組態檔案

  • 處理命令列選項期間。

    • 所有組態來源讀取

  • 作為 pip config 命令的一部分。

    • 所有組態來源讀取

    • 操作單一組態檔案

這兩個操作都使用 Configuration 物件所提供的功能,此物件封裝了處理組態檔案的所有邏輯,並提供相同的 API。

此區段的其餘部分記錄了 Configuration 類別,並說明潛在的未來重構概念。

Configuration 類別

Configuration 從當地環境的來源載入組態值:組態檔案和環境變數的組合。

它可以在「模式」下使用,從當地環境讀取所有值,以及操作單一組態檔案。它透過 load_only 屬性區分這兩種模式,此屬性可以是 None 或表示要操作的組態檔案的 類型

屬性 isolated 決定在載入組態時使用哪些來源。如果 isolatedTrue,就不會使用特定使用者的組態檔和環境變數。

從本機環境讀取

Configuration 可用於從本機環境中讀取所有組態來源,並存取這些值,依照 組態優先順序 區段中所述的優先邏輯。

對於此使用案例,Configuration.load_only 屬性會是 None,而使用的函式方法會是

類別 Configuration
載入()

處理所有與環境的互動,將所有組態資料載入至記憶體中的物件。

項目()

從載入至記憶體中的資訊提供關鍵字 - 值配對(像 dict.items()),處理所有覆寫順序邏輯。

取得值(金鑰)

從載入的組態提供給定金鑰的值。載入的組態可能 load_only 是 None 或非 None。這使用與 Configuration.items() 相同的基本機制,並遵循 組態優先順序 中所述的優先邏輯。

在撰寫本文的同時,使用 Configuration 的程式碼庫部分如下:ConfigOptionParser,用於將組態處理透明地包含在命令列處理邏輯一部分,以及 pip config get,用於在未透過 CLI 指定 種類 時印出整個組態。

針對單一設定檔進行操作

設定檔可用於操控單一設定檔,例如加入、變更或移除特定金鑰值配對。

針對這個使用案例,僅載入屬性將是非空值,且會代表要操作的設定檔 類型。除了前一章中討論的方法外,使用的方法會是

類別 設定檔
取得要編輯的檔案()

提供「最高優先權」檔案,用於 類型 經由 僅載入 指定的設定檔。這需要 僅載入 為是非空值。

設定值(金鑰, )

提供一種加入/變更單一金鑰值配對的方式,在經由 Configuration.get_file_to_edit() 指定的檔案中。

取消設定值(金鑰)

提供一種移除單一金鑰值配對的方式,在經由 Configuration.get_file_to_edit() 指定的檔案中。

儲存()

將內部記憶體狀態儲存到原始檔案中,將對 設定檔 物件所做的任何修改儲存回本地端環境。

類型

這是提供值的列舉,用以代表設定檔的「來源」。這包括環境變數,以及各種類型的設定檔(全域、特定網站、特定使用者、經由 PIP_CONFIG_FILE 指定)。

後續重構構想

  • 設定檔 類別按使用案例分拆為 2 個較小的類別
    • 指令碼使用案例(唯讀)-- 設定檔讀取程式

    • pip config 用例(讀取/寫入)-- ConfigurationModifier(繼承自 ConfigurationReader

  • 加載後迅速補齊 Configuration._dictionary