配置文件处理¶
The pip._internal.configuration
模块负责处理(例如,从配置文件加载值并保存值到配置文件)pip 使用的配置文件。该模块的功能主要通过模块的 Configuration
类公开和协调。
注意
本节文档目前正在撰写中。pip 开发者欢迎您帮助完成本节文档。如果您有兴趣帮忙,请在 跟踪问题 中告知我们。
概述¶
pip 将配置文件存储在标准的操作系统适当位置,这些位置由 appdirs
确定。这些文件采用 INI 格式,并使用 RawConfigParser
处理。
pip 在两个操作中使用配置文件
在处理命令行选项时。
从所有配置源读取
作为
pip config
命令的一部分。从所有配置源读取
操作单个配置文件
这两个操作都利用了 Configuration
对象提供的功能,该对象封装了处理配置文件的所有逻辑,并提供了相应的 API。
本节的其余部分介绍了 Configuration
类,并讨论了潜在的未来重构想法。
Configuration
类¶
Configuration
从本地环境中的源加载配置值:配置文件和环境变量的组合。
它可以在两种“模式”下使用:从本地环境读取所有值,以及操作单个配置文件。它使用 load_only
属性区分这两种模式,该属性可以是 None 或代表要操作的 kind 配置文件。
The isolated
属性决定加载配置时使用哪些源。如果 isolated
为 True
,则不会使用用户特定的配置文件和环境变量。
从本地环境读取¶
Configuration
可用于从本地环境中的所有配置源读取值,并访问这些值,并按照 配置优先级 部分中描述的优先级逻辑。
对于此用例,Configuration.load_only
属性将为 None
,使用的将是以下方法
- class Configuration¶
- load()¶
处理所有与环境的交互,将所有配置数据加载到内存中的对象中。
- items()¶
从已加载的内存中信息提供键值对(如
dict.items()
),处理所有覆盖顺序逻辑。
在编写本文档时,代码库中以这种方式使用 Configuration
的部分是:ConfigOptionParser
,以便将配置处理透明地包含在命令行处理逻辑中,以及 pip config get
,用于在通过 CLI 指定 kind 时打印整个配置。
操作单个配置文件¶
Configuration
可用于操作单个配置文件,例如添加、更改或删除某些键值对。
对于此用例,load_only
属性将是非 None,并将代表要操作的 kind 配置文件。除了上一节中讨论的方法之外,使用的将是以下方法
种类¶
这是一个枚举,提供值来表示配置的“源”。这包括环境变量和各种类型的配置文件(全局、站点特定、用户特定、通过 PIP_CONFIG_FILE
指定)。
未来重构想法¶
- 将
Configuration
类分解为 2 个更小的类,按用例划分 Command
用例(只读)--ConfigurationReader
pip config
用例(读/写)--ConfigurationModifier
(继承自ConfigurationReader
)
- 将
在加载时急切地填充
Configuration._dictionary
。