非官方、可导入的pip API
项目描述
由于 pip 是一个命令行工具,它没有官方、受支持的、可导入 的API。
但这并不意味着人们没有尝试过 导入pip,通常在pip的维护者进行常规重构时会导致许多头痛。
目标
此项目的目标是提供一个可导入的 pip API,该API完全符合从程序中推荐使用 pip 的方法。
如何实现?通过提供一个可导入的API,该API封装了到 pip 的命令行调用,这个库可以用作现有使用pip的内部API的替换。
范围
此目标意味着添加到这里的任何新API都必须具有以下等效功能
- 某些内部
pipAPI(或内部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,用于向需求文件添加哈希锁定- ...还有更多。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。