当前位置: 首页 > 专利查询>东北大学专利>正文

一种检测python环境中依赖冲突的方法技术

技术编号:28033939 阅读:42 留言:0更新日期:2021-04-09 23:15
本发明专利技术提供一种检测python环境中依赖冲突的方法,包括:步骤1:构建元数据存储库:获取PYPI所有开源项目名称,判断是否为新增项目;获取全部项目更新版本;获取全部项目更新版本的直接依赖关系;建立全局依赖网络,为每个项目形成依赖关系树。步骤2:分析项目更新引起的依赖问题:获取基础检测数据;查找被分析项目实际安装依赖项;建立被分析项目的完全依赖树及具体安装版本;检测依赖冲突问题;若未发现依赖冲突问题,执行预测问题分析;针对已发生的依赖冲突问题,向开发者推送解决方案。本发明专利技术可以持续监控PYPI生态系统的更新,对已发生依赖冲突的检测和可能发生依赖冲突的预测。通过本发明专利技术给出的修复意见,能够提供最佳解决方案。

【技术实现步骤摘要】
一种检测python环境中依赖冲突的方法
本专利技术涉及软件可靠性领域,特别涉及一种检测python环境中依赖冲突的方法。
技术介绍
在软件开发的过程中,会在项目中引入大量第三方开源项目来节约开发成本。PYPI是Python项目的主要中央存储库,它索引了数百万个项目,允许开发人员根据指定的版本约束自动下载和安装项目的依赖项。开发人员需要指定所需的版本约束在配置文件中。setup.py和requirements.txt是Python的依赖管理配置文件,和Java中的POM文件类似,记录了当前程序的所有依赖项及其版本约束。当一个项目引入第三方开源项目时,这个项目和它所依赖的其他软件项目将在构建时自动安装。PYPI可以自动化安装依赖项,极大地简化了Python项目的构建过程。此外,版本约束机制允许开发人员将依赖项限制到一组兼容的版本范围,并支持依赖项的自动演化。然而,这样的自动化伴随着潜在的依赖冲突问题的风险,当项目的安装版本违反了项目的版本范围约束时,可能会导致构建失败。Python项目大多是在一个自包含的环境中开发的,可以使用virtua本文档来自技高网...

【技术保护点】
1.一种检测python环境中依赖冲突的方法,其特征在于,包括流程如下:/n步骤1:构建元数据存储库,包括如下步骤:/n步骤:1.1:获取PYPI所有开源项目名称,判断是否为新增项目,若是则记录名称,若否则不用记录名称;/n步骤1.2:获取当前PYPI中所有开源项目版本信息,与数据库对比,获取全部项目更新版本;/n步骤1.3:获取全部项目更新版本的直接依赖关系;/n步骤1.4:建立全局依赖网络,为每个项目形成依赖关系树;/n步骤2:分析项目更新引起的依赖问题,包括如下步骤:/n步骤2.1:根据步骤1构建的元数据存储库获取基础检测数据;/n步骤2.2:查找被分析项目实际安装依赖项;/n步骤2.3...

【技术特征摘要】
1.一种检测python环境中依赖冲突的方法,其特征在于,包括流程如下:
步骤1:构建元数据存储库,包括如下步骤:
步骤:1.1:获取PYPI所有开源项目名称,判断是否为新增项目,若是则记录名称,若否则不用记录名称;
步骤1.2:获取当前PYPI中所有开源项目版本信息,与数据库对比,获取全部项目更新版本;
步骤1.3:获取全部项目更新版本的直接依赖关系;
步骤1.4:建立全局依赖网络,为每个项目形成依赖关系树;
步骤2:分析项目更新引起的依赖问题,包括如下步骤:
步骤2.1:根据步骤1构建的元数据存储库获取基础检测数据;
步骤2.2:查找被分析项目实际安装依赖项;
步骤2.3:通过步骤2.2,建立被分析项目的完全依赖树及具体安装版本;
步骤2.4:检测依赖冲突问题;
步骤2.5:若未发现依赖冲突问题,执行预测问题分析;
步骤2.6:针对已发生的依赖冲突问题,向开发者推送解决方案。


2.根据权利要求1所述检测python环境中依赖冲突的方法,其特征在于,所述步骤1.3的过程如下:
步骤1.3.1:获取全部项目更新版本详细信息,与临时队列中数据进行匹配,查询出所有项目对应本次更新版本的下载链接;
步骤1.3.2:下载链接中的安装包,执行uncompress方法进行解压缩操作,解压后将非依赖配置文件删除,仅保留项目依赖配置文件;
步骤1.3.3:读取步骤1.3.2中保留的配置文件,通过正则表达式匹配其中的依赖信息,将其存储于package_info数据表中,从而获取项目更新版本直接依赖关系。


3.根据权利要求1所述检测python环境中依赖冲突的方法,其特征在于,所述步骤1.4的过程如下:
步骤1.4.1:获取全部项目名存于NameList中,定义Pi为根节点项目,将Pi属于NameList的最新版本视为搜索的起始节点,逐一开始遍历NameList;
步骤1.4.2:解析Pi的setup.py文件,根据广度优先拓扑加载顺序,求得并下载Pi直接依赖的包D(Pi)的实际安装版本作为与其直接相连的节点,而二者的边权值包括版本范围、优先级;
步骤1.4.3:解析D(Pi)的setup.py文件,根据广度优先的拓扑加载顺序,求得并下载D(Pi)相对于根节点项目pi的直接依赖的包的实际安装版本,将其作为与之连接的节点,同时赋予边权值包括版本范围、优先级;
步骤1.4.4:循环执行步骤1.4.1至步骤1.4.3,直到将所有根节点项目pi直接依赖和间接依赖的package下载完毕为止,若存在依赖冲突的节点,则将加载优先级高的节点定为已安装节点。


4.根据权利要求1所述检测python环境中依赖冲突的方法,...

【专利技术属性】
技术研发人员:李朕名王莹王一博王超于海朱志良
申请(专利权)人:东北大学
类型:发明
国别省市:辽宁;21

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1