CN112631607A - 一种检测python环境中依赖冲突的方法 - Google Patents

一种检测python环境中依赖冲突的方法 Download PDF

Info

Publication number
CN112631607A
CN112631607A CN202011640702.8A CN202011640702A CN112631607A CN 112631607 A CN112631607 A CN 112631607A CN 202011640702 A CN202011640702 A CN 202011640702A CN 112631607 A CN112631607 A CN 112631607A
Authority
CN
China
Prior art keywords
dependency
version
item
conflict
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202011640702.8A
Other languages
English (en)
Other versions
CN112631607B (zh
Inventor
李朕名
王莹
王一博
王超
于海
朱志良
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Northeastern University China
Original Assignee
Northeastern University China
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Northeastern University China filed Critical Northeastern University China
Priority to CN202011640702.8A priority Critical patent/CN112631607B/zh
Publication of CN112631607A publication Critical patent/CN112631607A/zh
Application granted granted Critical
Publication of CN112631607B publication Critical patent/CN112631607B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

一种检测python环境中依赖冲突的方法
技术领域
本发明涉及软件可靠性领域,特别涉及一种检测python环境中依赖冲突的方法。
背景技术
在软件开发的过程中,会在项目中引入大量第三方开源项目来节约开发成本。PYPI是Python项目的主要中央存储库,它索引了数百万个项目,允许开发人员根据指定的版本约束自动下载和安装项目的依赖项。开发人员需要指定所需的版本约束在配置文件中。setup.py和requirements.txt是Python的依赖管理配置文件,和Java中的POM文件类似,记录了当前程序的所有依赖项及其版本约束。当一个项目引入第三方开源项目时,这个项目和它所依赖的其他软件项目将在构建时自动安装。PYPI可以自动化安装依赖项,极大地简化了Python项目的构建过程。此外,版本约束机制允许开发人员将依赖项限制到一组兼容的版本范围,并支持依赖项的自动演化。然而,这样的自动化伴随着潜在的依赖冲突问题的风险,当项目的安装版本违反了项目的版本范围约束时,可能会导致构建失败。
Python项目大多是在一个自包含的环境中开发的,可以使用virtualenv、conda和pipenv等工具创建。pip是一个通用的Python包管理工具。提供了对Python包的查找、下载、安装、卸载的功能。在构建Python项目时,客户端库安装程序pip会在PYPI上下载大部分所需的依赖项。我们将需要下载的这些库称为远程依赖项。对于每个需要的远程依赖项,pip根据其名称和版本约束从PYPI下载。如果pip找到满足版本约束的依赖项的多个版本,它将下载并安装最新版本的依赖文件。
PYPI允许Python开发人员将他们的项目作为软件包发布。然而当一个项目发生构建失败时,这个失败会影响所有下游项目的构建。因此,PYPI中的项目构建失败的后果是严重的。PYPI上托管的许多项目都经常更新。这些更新可能会产生严重的影响,因为它们可能会影响他们的下游项目。PYPI中频繁的库更新导致依赖冲突问题迫在眉睫。
目前,PYPI上的项目很难获得带有版本约束的完整依赖关系图。即使python中最先进管理工具,如pipenv和poetry,也只能显示出安装了哪些依赖项,而不显示它们具体的依赖关系。在python生态环境中,开发人员迫切的需要能生成依赖关系图并够诊断依赖冲突问题工具。当前还没有能合适的技术方案和工具来解决越来越严重的依赖冲突问题。
根据研究结果表明,目前依赖问题检测的局限性是由于上游和下游项目之间的复杂依赖关系造成的。
发明内容
针对于现有技术的缺陷,本发明提供了一种检测python环境中依赖冲突的方法,从整个生态系统的角度不断监视依赖冲突。首先通过收集每个项目的版本数据,包括与直接依赖的版本约束关系及其声明顺序。其次,它为所有驻留在PYPI上的库构建了一个元数据存储库,以便能够分析上游和下游项目之间的版本约束的干扰。然后,通过持续监控PYPI上的项目发布信息,本发明同步更新元数据存储库,精确地建模依赖关系。对于捕获的项目更新,使用深度优先搜索策略来识别受影响的下游项目。本发明还对元数据存储库执行广度优先搜索,以便根据pip的依赖安装规则为每个可能受影响的下游项目构建完整的依赖关系图。最后,实现了依赖冲突问题的自动诊断与预测。
一种检测python环境中依赖冲突的方法,包括流程如下:
步骤1:构建元数据存储库,包括如下步骤:
步骤:1.1:获取PYPI所有开源项目名称,判断是否为新增项目,若是则记录名称,若否则不用记录名称;
步骤1.2:获取当前PYPI中所有开源项目版本信息,与数据库对比,获取全部项目更新版本;
步骤1.3:获取全部项目更新版本的直接依赖关系,过程如下:
步骤1.3.1:获取全部项目更新版本详细信息,与临时队列中数据进行匹配,查询出所有项目对应本次更新版本的下载链接;
步骤1.3.2:下载链接中的安装包,执行uncompress方法进行解压缩操作,解压后将非依赖配置文件删除,仅保留项目依赖配置文件;
步骤1.3.3:读取步骤1.3.2中保留的配置文件,通过正则表达式匹配其中的依赖信息,将其存储于package_info数据表中,从而获取项目更新版本直接依赖关系。
步骤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下载完毕为止,若存在依赖冲突的节点,则将加载优先级高的节点定为已安装节点。
步骤2:分析项目更新引起的依赖问题,包括如下步骤:
步骤2.1:根据步骤1构建元数据存储库获取基础检测数据;
步骤2.2:查找被分析项目实际安装依赖项,过程如下:
定义conflict_list为被分析项目的冲突状态位,用于记录被分析项目的依赖节点信息引起依赖冲突问题的状态;priority_list为根节点项目Pi的优先级队列,用于记录实际安装时,进入依赖树的安装顺序优先级;node_list为根节点项目Pi的实际安装依赖项名称;version_list为根节点项目Pi的实际依赖项的安装版本;
步骤2.2.1:通过被分析项目和版本号,查询到该版本被分析项目的直接依赖和依赖版本范围,遍历conflict_list,priority_list,node_list,version_list,range_list队列,查询依赖项和依赖版本范围是否与优先级较高的依赖项存在交集,记录判断信息,若有则取较高优先级依赖项的版本作为自身版本存入队列中,若没有则将符合依赖范围的最新版本存入队列中,并记录优先级,节点名及冲突状态;
步骤2.2.2:通过广度优先搜索,查询被分析项目和版本号对应全部直接依赖与间接依赖节点,再依次执行步骤2.2.1。
步骤2.3:通过步骤2.2,建立被分析项目的完全依赖树及具体安装版本;
步骤2.4:检测依赖冲突问题,过程如下:
步骤2.4.1:根据构建元数据存储库得到每个项目依赖关系网络,其中包含被分析项目完整依赖结构及其每层依赖项的版本范围;
步骤2.4.2:根据被分析项目依赖关系网络进行潜在依赖冲突识别,对于该网络中一个节点vi,若存在根节点到达vi的路径不止一条,则节点vi为根节点项目的潜在冲突节点,根节点项目为节点vi的影响节点;
步骤2.4.3:根据该项目依赖关系网络进行依赖冲突识别,对于该网络中一个节点vi,设置节点vi为具有较高安装优先级的潜在冲突结点Libi的实际安装版本,[lower,Upper]为具有较低安装优先级的Libi的版本范围,若vi不属于[lower,Upper],则称该项目存在关于Libi的依赖冲突。
步骤2.5:若未发现依赖冲突问题,执行预测问题分析,过程如下:
其中,步骤2.5.1与步骤2.5.2不分先后顺序;
步骤2.5.1:根据该项目依赖关系网络,若某一个项目对某一个依赖包锁定了版本,该项目下游的项目,同样依赖于该项目并该节点的版本范围有上边界,且不是当前最新版本,则判定为有潜在类型一的依赖冲突,若尝试逐一升级到该版本范围上边界到最新版本之间的任意一个版本是否引起依赖冲突,并记录下该依赖包升级的风险范围;
步骤2.5.2:根据该项目依赖关系网络,若存在节点优先级更高的版本范围无上边界,即不指定版本范围,优先级较低的有上边界但大于当前最新版本,则判定为有潜在类型二的依赖冲突,优先级较低的有上边界小于当前最新版本的,会演化为依赖冲突问题。
步骤2.6:针对已发生的依赖冲突问题,向开发者推送解决方案。
采用上述技术方案所产生的有益效果在于:本发明一种检测python环境中依赖冲突的方法可以持续监控PYPI生态系统的依赖冲突。该方法能有效地检测依赖冲突问题,具有较高的检测精度,为开发人员解决直依赖冲突提供了有用的诊断信息。能够极大的降低python软件项目出现依赖问题的风险,节省了开发者检查依赖冲突原因的时间。并且通过本发明给出的修复意见,能够提供针对依赖问题的最佳解决方案。同时,本发明可以对未来可能发生的依赖冲突问题进行预测,可以大幅度降低PYPI生态社区中由于节点更新导致的依赖冲突问题,尽最大程度规避开发者使用第三方依赖包的冲突风险。
附图说明
图1为本发明实施例中一种检测python环境中依赖冲突的方法流程图;
图2为本发明实施例中构建元数据存储库的流程图;
图3为本发明实施例中分析项目更新可能造成依赖问题的流程图;
具体实施方式
在python项目开发过程中,需要引入大量第三方开源项目,由于开源项目存在多个版本,根据依赖的传递性,会有很多间接依赖导入,导致项目发生依赖冲突现象,但是开发人员缺乏工具支持来全面了解不同项目依赖版本约束,发现依赖冲突问题并给出原因。本发明通过对python依赖情况分析,形成PYPI社区全局依赖网络及每个python项目依赖关系树。可以持续监控PYPI生态系统的更新,基于对依赖树的分析实现对已发生依赖冲突的检测和可能发生依赖冲突的预测。软件开发者通过本发明可以查看自身项目的依赖关系树并及时检测出依赖冲突问题,可以在有限的时间内最大程度的解决依赖冲突风险。
下面结合附图对本发明实施方式做进一步的详细说明:
本发明提供一种检测python环境中依赖冲突的方法,其流程图如图1所示,包括以下步骤:
如图2所示步骤1:构建元数据存储库,包括:
步骤1.1:获取到当前PYPI中所有开源项目:
首先,执行selectfilename方法来访问PYPI中api接口,获取当前时间节点的全部文件名信息,将其存入临时队列中。访问数据表pypi_info,依次检查临时队列中文件名是否在pypi_info存在,若没有,则为新增数据,将其写入数据表中并记录当前日期,方便以后管理。
步骤1.2:获取到当前PYPI中所有开源项目版本信息:
执行selectfileversion方法遍历数据表中pypi_info项目名称,通过访问PYPI中api接口来读取各个项目更新版本信息,与数据表pypi_info_version中记录进行对比,记录更新的版本。
步骤1.3:获取更新版本直接依赖关系:
通过步骤1.1和步骤1.2获得的新增和更新项目数据为基础数据,来获取其依赖关系。定义Pi为根节点项目,Pi为本次更新中的一个新增记录,以Pi为例来进行获取依赖关系的实施说明。
步骤1.3.1:通过访问https://pypi.org/project/获取项目Pi版本详细信息,与临时队列中数据进行匹配,查询出项目Pi对应本次更新版本的下载链接。
步骤1.3.2:将下载链接中的安装包,该安装包即为项目Pi对应更新版本的实际安装文件。下载中对安装包类型进行检测,若类型为whl,由于该类型文件中无法解析依赖文件,则需要更换安装类型。下载完成后执行uncompress方法进行解压缩操作,解压后将非依赖配置文件删除,仅保留Pi的依赖配置文件
步骤1.3.3:读取步骤1.3.2中保留的配置文件,通过正则表达式匹配其中的依赖信息,将其存储于package_info数据表中,从而获取项目Pi更新版本直接依赖关系。
步骤1.4:根据数据库中已有的PYPI社区中全部项目的直接依赖数据,针对每个项目,根据广度优先拓扑加载顺序,建立全局依赖网络。依赖网络中节点为安装项目及版本,边为依赖关系。根据依赖网络结构可以清晰直观的看出PYPI中项目之间的依赖关系。
步骤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下载完毕为止,
若存在依赖冲突的节点,则将加载优先级高的节点视为已安装节点。
如图3所示步骤2:分析项目更新可能造成依赖问题,包括:
步骤2.1:根据步骤1构建元数据存储库过程中可以获得更新的项目名及版本信息,将其存入临时队列,作为当次依赖冲突监控的基础数据。
步骤2.2:获取其直接依赖,由于数据表中存储的是依赖的约束范围,需要进行依赖范围解析来确定实际安装版本,以根节点项目Pi为例,Pi为待分析项目,具体实施步骤如下:
定义conflict_list,priority_list,node_list,version_list,range_list五个队列,conflict_list为根节点项目Pi的冲突状态位,用于记录Pi的依赖节点信息是否会造成依赖冲突问题;priority_list为根节点项目Pi的优先级队列,用于记录实际安装时,进入依赖树的安装顺序优先级;
node_list为根节点项目Pi的实际安装依赖项名称;version_list为根节点项目Pi的实际依赖项的安装版本。
步骤2.2.1:通过根节点项目Pi和版本号,可以查询到该版本Pi的直接依赖和依赖版本范围,遍历conflict_list,priority_list,node_list,version_list,range_list队列,查询依赖项和依赖版本范围是否与优先级较高的依赖项存在交集,记录判断信息,若没有则将将符合依赖范围的最新版本存入队列中,并记录优先级,节点名及冲突状态。
步骤2.2.2:通过广度优先搜索,查询Pi和版本号对应全部直接依赖与间接依赖节点,再依次执行步骤2.2.1。
步骤2.3:通过步骤2.2,建立根节点项目Pi的完全依赖树及具体安装版本。通过依赖树可以清晰直观的展示出依赖关系的细节。
步骤2.4:检测依赖冲突问题
以其中一个根节点项目Pi为例,检测根节点项目Pi依赖冲突问题,具体实施步骤如下:
步骤2.4.1:根据步骤步骤2.2,可以构建根节点项目Pi依赖关系网络,包含Pi所依赖项目的体系结构和具体依赖项的版本范围。
步骤2.4.2:通过对该网络节点进行遍历,若针项目Pi中的一个依赖包Di,有两条及以上不同的依赖路径可以到达,则将Di定义为潜在依赖冲突节点,将Di放入临时检测列表中,等待下一步检测。
步骤2.4.3:执行single_detect_conflict方法,项目Pi中的全部潜在依赖冲突节点进行依赖冲突检测,若优先级较高的潜在依赖冲突节点Di的实际安装版本,不属于优先级较低
的Di的版本范围内,就可以判断该项目Pi存在针对Di的依赖冲突问题。
步骤2.5:若未发现依赖冲突问题,执行预测问题分析。
根据步骤2.4可以判断出是否存在潜在依赖,在此基础上,对依赖冲突类别进行划分。预测问题共分为两种,需要分别进行检测。
步骤2.5.1:执行single_detect_forecast_type01方法,对根节点项目Pi进行预测类型一的检测,将Pi和版本号传入该方法中,建立完全依赖树。提取其中约束条件为锁定版本的依赖项。令依赖项为Di,Di是项目的直接依赖节点,当Di的版本范围有上边界,且不是当前最新版本时,可能会产生预测类型一,通过循环对比range_list队列中依赖范围,在pypi_info_version数据表中查询Di可能升级到的版本信息,查询package_info数据表中依赖关系,逐一进行替换,判断风险范围并进行记录。
步骤2.5.2:执行single_detect_forecast_type02方法,对项目Pi进行预测类型二的检测,将Pi和版本号传入该方法中,建立完全依赖树。循环检测priority_list,range_list数据,令Di为Pi依赖项,当安装优先级更高的Di版本范围无上边界,安装优先级较低的Di依赖约束条件有上边界且上边界大于Di最新版本时,为预测类型二,对风险节点进行记录。
所述预测类型一即有潜在类型一的依赖冲突,其特点为:若某一个项目对某一个依赖包锁定了版本,该项目下游的项目,同样依赖于该项目并该节点的版本范围有上边界,且不是当前最新版本。所述预测类型二即有潜在类型二的依赖冲突,其特点为:若存在节点优先级更高的版本范围无上边界,即不指定版本范围,优先级较低的有上边界但大于当前最新版本。
步骤2.6:针对项目Pi已发生的依赖冲突问题,或者检测到项目Pi预测类型一或预测类型二,给出解决方案。将解决方案在网站上呈现出来,并推送给Pi开发者,具体推送结果如下:
步骤2.6.1:根据步骤2.3项目Pi的完全依赖树及具体安装版本,将完全依赖树以文本格式进行输出。
步骤2.6.2:若检测出依赖冲突问题,从步骤2.4中可以获取到冲突节点Di的依赖关系,将已经发生的依赖冲突的Pi到Di的依赖路径以文本形式输出。
步骤2.6.3:若检测出预测类型问题,从步骤2.5中可以获取到风险节点Di的依赖关系,将已经可能发生依赖冲突的Pi到Di的依赖路径和风险范围以文本形式输出。
步骤2.6.4:将所得文本文件展现在网站中,并通过开源社区推送给开发者。

Claims (6)

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环境中依赖冲突的方法,其特征在于,所述步骤2.2的过程如下:
定义conflict_list为被分析项目的冲突状态位,用于记录被分析项目的依赖节点信息引起依赖冲突问题的状态;priority_list为根节点项目Pi的优先级队列,用于记录实际安装时,进入依赖树的安装顺序优先级;node_list为根节点项目Pi的实际安装依赖项名称;version_list为根节点项目Pi的实际依赖项的安装版本;
步骤2.2.1:通过被分析项目和版本号,查询到该版本被分析项目的直接依赖和依赖版本范围,遍历conflict_list,priority_list,node_list,version_list,range_list队列,查询依赖项和依赖版本范围是否与优先级较高的依赖项存在交集,记录判断信息,若有则取优先级高的依赖项的版本作为自身版本存入队列中,若没有则将符合依赖范围的最新版本存入队列中,并记录优先级,节点名及冲突状态;
步骤2.2.2:通过广度优先搜索,查询被分析项目和版本号对应全部直接依赖与间接依赖节点,再依次执行步骤2.2.1。
5.根据权利要求1所述检测python环境中依赖冲突的方法,其特征在于,所述步骤2.4的过程如下:
步骤2.4.1:根据构建元数据存储库得到每个项目依赖关系网络,其中包含被分析项目完整依赖结构及其每层依赖项的版本范围;
步骤2.4.2:根据被分析项目依赖关系网络进行潜在依赖冲突识别,对于该网络中一个节点vi,若存在根节点到达vi的路径不止一条,则节点vi为根节点项目的潜在冲突节点,根节点项目为节点vi的影响节点;
步骤2.4.3:根据该项目依赖关系网络进行依赖冲突识别,对于该网络中一个节点vi,设置节点vi为具有较高安装优先级的潜在冲突结点Libi的实际安装版本,[lower,Upper]为具有较低安装优先级的Libi的版本范围,若vi不属于[lower,Upper],则称该项目存在关于Libi的依赖冲突。
6.根据权利要求1所述一种检测python环境中依赖冲突的方法,其特征在于,所述步骤2.5包括:步骤2.5.1与步骤2.5.2不分先后顺序
步骤2.5.1:根据该项目依赖关系网络,若某一个项目对某一个依赖包锁定了版本,该项目下游的项目,同样依赖于该项目并该节点的版本范围有上边界,且不是当前最新版本,则判定为有潜在类型一的依赖冲突,若尝试逐一升级到该版本范围上边界到最新版本之间的任意一个版本是否引起依赖冲突,并记录下该依赖包升级的风险范围;
步骤2.5.2:根据该项目依赖关系网络,若存在节点优先级更高的版本范围无上边界,即不指定版本范围,优先级较低的有上边界但大于当前最新版本,则判定为有潜在类型二的依赖冲突,优先级较低的有上边界小于当前最新版本的,会演化为依赖冲突问题。
CN202011640702.8A 2020-12-31 2020-12-31 一种检测python环境中依赖冲突的方法 Active CN112631607B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011640702.8A CN112631607B (zh) 2020-12-31 2020-12-31 一种检测python环境中依赖冲突的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011640702.8A CN112631607B (zh) 2020-12-31 2020-12-31 一种检测python环境中依赖冲突的方法

Publications (2)

Publication Number Publication Date
CN112631607A true CN112631607A (zh) 2021-04-09
CN112631607B CN112631607B (zh) 2023-09-26

Family

ID=75291554

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011640702.8A Active CN112631607B (zh) 2020-12-31 2020-12-31 一种检测python环境中依赖冲突的方法

Country Status (1)

Country Link
CN (1) CN112631607B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113793063A (zh) * 2021-09-28 2021-12-14 广东电网有限责任公司 一种配电网规划项目方案冲突检测的方法及装置
CN114780109A (zh) * 2022-05-20 2022-07-22 厦门大学 Python项目第三方库依赖自动化解析与安装方法
CN115016840A (zh) * 2022-06-30 2022-09-06 厦门大学 基于调用图的依赖冲突修复方法及装置
CN115373824A (zh) * 2022-10-24 2022-11-22 恒生电子股份有限公司 冲突检测方法、装置、计算设备和计算机可读存储介质
CN118331587A (zh) * 2024-06-11 2024-07-12 中科航迈数控软件(深圳)有限公司 依赖库的冲突检测方法、装置、设备、存储介质及产品
CN118550546A (zh) * 2024-07-26 2024-08-27 南京航空航天大学 一种Python项目依赖冲突检测和解决方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073582A (zh) * 2010-07-30 2011-05-25 兰雨晴 基于冲突的软件包依赖关系检查方法
US20150100879A1 (en) * 2013-10-09 2015-04-09 Cisco Technology, Inc. Framework for dependency management and automatic file load in a network environment
WO2017212496A2 (en) * 2016-06-08 2017-12-14 Veriversion Labs Ltd. Methods and systems of software testing, distribution, installation and deployment
US20180052682A1 (en) * 2016-08-16 2018-02-22 Sonatype, Inc. Method and system for authoritative name analysis of truue origin of a file
CN108334334A (zh) * 2018-03-07 2018-07-27 政采云有限公司 一种管理依赖包版本的方法和系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073582A (zh) * 2010-07-30 2011-05-25 兰雨晴 基于冲突的软件包依赖关系检查方法
US20150100879A1 (en) * 2013-10-09 2015-04-09 Cisco Technology, Inc. Framework for dependency management and automatic file load in a network environment
WO2017212496A2 (en) * 2016-06-08 2017-12-14 Veriversion Labs Ltd. Methods and systems of software testing, distribution, installation and deployment
US20180052682A1 (en) * 2016-08-16 2018-02-22 Sonatype, Inc. Method and system for authoritative name analysis of truue origin of a file
CN108334334A (zh) * 2018-03-07 2018-07-27 政采云有限公司 一种管理依赖包版本的方法和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
WANG Y等: "Watchman: Monitoring dependency conflicts for python library ecosystem", 《PROCEEDINGS - INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING》, pages 125 - 135 *
沈宇桔: "正则表达式复杂度攻击自动化检测技术研究", 《 中国优秀硕士学位论文全文数据库 信息科技辑》, no. 07, pages 138 - 52 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113793063A (zh) * 2021-09-28 2021-12-14 广东电网有限责任公司 一种配电网规划项目方案冲突检测的方法及装置
CN114780109A (zh) * 2022-05-20 2022-07-22 厦门大学 Python项目第三方库依赖自动化解析与安装方法
CN114780109B (zh) * 2022-05-20 2024-06-04 厦门大学 Python项目第三方库依赖自动化解析与安装方法
CN115016840A (zh) * 2022-06-30 2022-09-06 厦门大学 基于调用图的依赖冲突修复方法及装置
CN115016840B (zh) * 2022-06-30 2024-08-02 厦门大学 基于调用图的依赖冲突修复方法及装置
CN115373824A (zh) * 2022-10-24 2022-11-22 恒生电子股份有限公司 冲突检测方法、装置、计算设备和计算机可读存储介质
CN118331587A (zh) * 2024-06-11 2024-07-12 中科航迈数控软件(深圳)有限公司 依赖库的冲突检测方法、装置、设备、存储介质及产品
CN118550546A (zh) * 2024-07-26 2024-08-27 南京航空航天大学 一种Python项目依赖冲突检测和解决方法及装置

Also Published As

Publication number Publication date
CN112631607B (zh) 2023-09-26

Similar Documents

Publication Publication Date Title
CN112631607B (zh) 一种检测python环境中依赖冲突的方法
Kikas et al. Structure and evolution of package dependency networks
US8930930B2 (en) Updating a computer system
EP4086771A1 (en) Method and system for the on-demand generation of graph-like models out of multidimensional observation data
JP2020510925A (ja) テストケースを利用してテストを遂行する方法および装置
US9880832B2 (en) Software patch evaluator
US10671627B2 (en) Processing a data set
CN111858301B (zh) 基于变更历史的组合服务测试用例集约简方法及装置
CN112306877B (zh) 一种电力系统故障运维方法及系统
CN110543427B (zh) 测试用例存储方法、装置、电子设备及存储介质
CN114780109B (zh) Python项目第三方库依赖自动化解析与安装方法
CN114780138B (zh) 流场模拟软件代码版本管理方法、装置和存储介质
JP4848128B2 (ja) データベース・システム、データベース・システムのためのコンピュータ実行可能な方法、プログラムおよびデータベース・システムにおける索引テーブルをアップデートする方法
US20100036515A1 (en) Real-Time Assembly and Part Validation and Auto-Disposition
CN117009230B (zh) 一种基于代码覆盖率评测的精准测试方法及系统
CN115934106B (zh) 快速检测apt仓库源依赖完整性的方法
CN112506999A (zh) 基于云计算和人工智能的大数据挖掘方法及数字内容中心
US12073295B2 (en) Machine learning model operation management system and method
CN113835731A (zh) 根据更新组件提示出错方法、装置、电子设备及存储介质
US6389370B1 (en) System and method for determining which objects in a set of objects should be processed
CN111736848A (zh) 包冲突定位方法、装置、电子设备及可读存储介质
US20240134967A1 (en) Systems and methods for contextual alert enrichment in computing infrastructure and remediation thereof
CN114168972B (zh) 一种npm生态系统安全漏洞阻塞点的检测与修复方法
Liu et al. Drift: Fine-Grained Prediction of the Co-Evolution of Production and Test Code via Machine Learning
CN115686583B (zh) 海量物联网设备升级方法、装置、电子设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant