非官方、可导入的pip API
项目描述
由于 pip
是一个命令行工具,它没有官方、受支持的、可导入 的API。
但这并不意味着人们没有尝试过 导入pip
,通常在pip的维护者进行常规重构时会导致许多头痛。
目标
此项目的目标是提供一个可导入的 pip
API,该API完全符合从程序中推荐使用 pip
的方法。
如何实现?通过提供一个可导入的API,该API封装了到 pip
的命令行调用,这个库可以用作现有使用pip的内部API的替换。
范围
此目标意味着添加到这里的任何新API都必须具有以下等效功能
- 某些内部
pip
API(或内部API的组合) - 某些CLI调用(或CLI调用的组合)
任何当前无法通过内部 pip
API或CLI调用实现的功能都不在范围之内。
安装
您可以使用 pip
或 conda
安装 pip-api
。
使用pip:
python -m pip install pip-api
使用conda:
conda install -c conda-forge pip-api
支持的命令
并非所有版本的pip
和所有平台上都支持所有命令。如果你尝试使用的命令不兼容,pip_api
将为你的程序抛出一个pip_api.exceptions.Incompatible
异常。
所有pip
版本都可用
-
pip_api.version()
返回
pip
版本作为字符串,例如"9.0.1"
-
pip_api.installed_distributions(local=False)
返回一个包含以下属性的
Distribution
对象列表,表示所有已安装的分发Distribution.name
(string
):已安装分发的名称Distribution.version
(packaging.version.Version
):已安装分发的版本Distribution.location
(string
):已安装分发的位置Distribution.editable
(bool
):分发是否可编辑。可选地接受一个local
参数以过滤出全局安装的包
-
pip_api.parse_requirements(filename, options=None, include_invalid=False, strict_hashes=False)
接受一个包含需求文件名的路径。返回一个从包名到
pip_api.Requirement
对象(packaging.requirements.Requirement
子类的映射)的映射,具有以下属性Requirement.name
(string
):需求名称。Requirement.extras
(set
):需求指定的额外内容集合。Requirement.specifier
(packaging.specifiers.SpecifierSet
):需求指定的版本SpecifierSet
。Requirement.marker
(packaging.markers.Marker
):需求标记的Marker
。可以是None
。Requirement.hashes
(dict
):需求的哈希映射,对应于--hash=...
选项。Requirement.editable
(bool
):需求是否可编辑,对应于-e ...
Requirement.filename
(str
):需求来源的文件名。Requirement.lineno
(int
):解析需求的源行号。
可选地接受一个
options
参数以覆盖用于跳过需求行的正则表达式。可选地接受一个include_invalid
参数,如果需求无法正确解析,则返回一个UnparsedRequirement
。可选地接受一个strict_hashes
参数,要求所有需求都有关联的哈希。
从pip>=8.0.0
版本起可用
pip_api.hash(filename, algorithm='sha256')
以字符串的形式返回结果。有效的
algorithm
参数是'sha256'
、'sha384'
和'sha512'
从pip>=19.2
版本起可用
pip_api.installed_distributions(local=False, paths=[])
如上所述,但有一个额外的可选参数
paths
,用于提供查找已安装分发的位置列表。尝试使用pip<19.2
的paths
参数将导致PipError
。
用例
该库被许多其他工具使用,包括
pip-audit
,用于分析已知漏洞的依赖关系pytest-reqs
,用于比较需求文件与测试依赖关系hashin
,用于向需求文件添加哈希锁定- ...还有更多。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。