因此,当使用pip
安装Python包时,它会安装该包的所有依赖项的最新版本。但是我的包定义了支持的依赖项的版本范围。出于测试目的,我想在CI中运行测试,不仅针对所有最新的依赖项,而且还针对所有最旧版本的依赖项(因此,声称支持最旧的版本)。
我知道我还必须测试受支持的依赖项版本的所有组合,但我只需测试所有最新和最旧的版本即可。
因此,问题是如何将这些依赖项与最旧的受支持版本一起安装。
发布于 2020-01-13 14:03:17
我写了以下脚本:
import pkg_resources
package = pkg_resources.working_set.by_key[package_name]
oldest_dependencies = []
for requirement in package.requires():
dependency = requirement.project_name
if requirement.extras:
dependency += '[' + ','.join(requirement.extras) + ']'
for comparator, version in requirement.specs:
if comparator == '==':
if len(requirement.specs) != 1:
raise ValueError('Invalid dependency: {requirement}'.format(requirement=requirement))
dependency += '==' + version
elif comparator == '<=':
if len(requirement.specs) != 2:
raise ValueError('Invalid dependency: {requirement}'.format(requirement=requirement))
elif comparator == '>=':
dependency += '==' + version
oldest_dependencies.append(dependency)
for dependency in oldest_dependencies:
print(dependency)
它会打印出最早的依赖项。然后,我可以运行它并将其传递给pip
以安装这些版本。
唯一的问题是,它不能与依赖关系的下限一起工作,比如>1.0
,它需要检查PyPi,哪个版本确实是最旧的,但仍然比1.0更新。
https://stackoverflow.com/questions/59701935
复制相似问题