一种组件生成方法、装置、电子设备及可读存储介质
文献发布时间:2023-06-19 13:46:35
技术领域
本申请涉及计算机技术领域,特别涉及一种组件生成方法、组件生成装置、电子设备及计算机可读存储介质。
背景技术
在如今使用Python语言(一种计算机编程语言)开发的应用软件中,功能模块越来越复杂,这导致代码体量过大,代码模块之间逻辑复杂、冗余度高,各功能模块代码之间重复较多,严重增加程序的开发难度。此外,公共的模块、算法、函数等直接穿插在功能流程中,在修改时容易被误改进而影响全局,也不利于公共的模块、算法、函数等在跨不同项目之间的复用。同时,实际开发过程中存在不同的应用场景,相关技术难以满足多场景多环境的开发需求。
因此,相关技术存在的代码体量过大、复用程度低、难以满足多场景多环境开发需求的问题,是本领域技术人员需要解决的技术问题。
发明内容
有鉴于此,本申请的目的在于提供一种组件生成方法、组件生成装置、电子设备及计算机可读存储介质,减少项目的代码体量,提高复用程度,满足了多场景多环境开发需求。
为解决上述技术问题,本申请提供了一种组件生成方法,包括:
获取多个共性py源码;
利用打包工具对所述共性py源码进行处理,得到py组件和pyc组件;其中,所述打包工具中包括编译工具,所述编译工具用于对共性py源码进行编译处理得到pyc数据,所述打包工具对所述共性py源码打包得到所述py组件,对所述pyc数据打包得到所述pyc组件;
将所述py组件和所述pyc组件分别上传至对应的组件库。
可选地,所述编译工具的数量大于一个,且各个编译工具对应于不同的版本;
所述利用打包工具对所述共性py源码进行处理,得到py组件和pyc组件,包括:
分别利用各个所述编译工具对所述共性py源码进行编译处理,得到若干个不同版本的所述pyc数据;
根据所述打包工具的打包属性,分别对所述共性py源码和所述pyc数据打包,得到所述py组件和所述pyc组件;
相应的,所述将所述py组件和所述pyc组件分别上传至对应的组件库,包括:
根据组件类型和组件版本,将所述py组件和所述pyc组件分别上传至对应的组件库。
可选地,还包括:
利用获取到的属性设置信息,设置所述共性py源码对应的第一打包属性和/或各个版本的所述pyc数据分别对应的第二打包属性。
可选地,所述获取多个共性py源码,包括:
获取若干个初始py源码;
对所述初始py源码进行拆分和共性部分提取,得到多个所述共性py源码。
可选地,还包括:
获取项目信息;所述项目信息用于说明项目与对应的目标组件的依赖关系,所述目标组件为所述py组件或所述pyc组件;
利用所述项目信息构建虚拟集合组件,并将所述虚拟集合组件上传至对应的所述组件库;
若检测到项目部署指令,则利用所述虚拟集合组件和目标组件部署项目。
可选地,所述若检测到项目部署指令,则利用所述虚拟集合组件和目标组件部署项目,包括:
若检测到所述项目部署指令,则确定所述项目部署指令对应的目标虚拟集合组件;
将所述目标虚拟集合组件安装至项目环境中,并运行所述目标虚拟集合组件;所述目标虚拟集合组件在运行过程中调用所述目标组件。
可选地,还包括:
若检测到更新指令,则根据所述更新指令更新所述虚拟集合组件。
本申请还提供了一种组件生成装置,包括:
获取模块,用于获取多个共性py源码;
打包模块,用于利用打包工具对所述共性py源码进行处理,得到py组件和pyc组件;其中,所述打包工具中包括编译工具,所述编译工具用于对共性py源码进行编译处理得到pyc数据,所述打包工具对所述共性py源码打包得到所述py组件,对所述pyc数据打包得到所述pyc组件;
上传模块,用于将所述py组件和所述pyc组件分别上传至对应的组件库。
本申请还提供了一种电子设备,包括存储器和处理器,其中:
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现上述的组件生成方法。
本申请还提供了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现上述的组件生成方法。
本申请提供的组件生成方法,获取多个共性py源码;利用打包工具对共性py源码进行处理,得到py组件和pyc组件;其中,打包工具中包括编译工具,编译工具用于对共性py源码进行编译处理得到pyc数据,打包工具对共性py源码打包得到py组件,对pyc数据打包得到pyc组件;将py组件和pyc组件分别上传至对应的组件库。
可见,该方法首先获取多个共性py源码,共性py源码为在项目代码中被经常使用的py源码,通过获取共性py源码并利用打包工具对其进行处理得到py组件,可以在多个项目中复用该py组件,减少项目的代码体量,提高复用程度。此外,打包工具中还包括编译工具,编译工具对共性py源码进行编译处理得到pyc数据。pyc数据和py数据分别用在发版的应用场景和开发的应用场景,在生成py组件的同时,同时生成对应的pyc组件,并将py组件和pyc组件分别上传至对应的组件库,使得用户可以根据开发场景和环境选择所需要的类型的组件进行调用,满足了多场景多环境开发需求,解决了相关技术存在的代码体量过大、复用程度低、难以满足多场景多环境开发需求的问题。
此外,本申请还提供了一种组件生成装置、电子设备及计算机可读存储介质,同样具有上述有益效果。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种组件生成方法流程图;
图2为本申请实施例提供的一种具体的项目部署方法流程图;
图3为本申请实施例提供的一种组件生成装置的结构示意图;
图4为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图1,图1为本申请实施例提供的一种组件生成方法流程图。该方法包括:
S101:获取多个共性py源码。
py源码,是指以Python这一编程语言撰写而成的源代码,共性py源码,是指其在较多个项目的py源码中被使用的源代码。对于共性py源码的表现形式,具体可以为函数、功能模块、算法等,其内容不做限定。
对于共性py源码的具体获取过程,在一种实施方式中,可以根据获取的指令将用户指定的py源码确定为共性py源码。然而,在不同的业务场景下的多个项目来说,由于业务和项目所需执行的步骤和实现的功能不同,因此其调用的函数、算法等通常不同,进而导致不同业务场景下的共性py源码可能不同,通过指令确定共性py源码的方式可能会导致共性py源码不够准确。为了解决上述问题,在另一种实施方式中,可以执行如下步骤:
步骤11:获取若干个初始py源码。
步骤12:对初始py源码进行拆分和共性部分提取,得到多个共性py源码。
其中,初始py源码,是指需要被提取共性部分的完整项目源代码,其应当与共性py源码所适用的业务场景相匹配。通过对初始py源码进行拆分,可以以拆分后的单元为粒度进行匹配,并将匹配的到的共性部分提取出来作为共性py源码。
具体的,需要按照拆分粒度,对初始py源码进行拆分,拆分粒度的具体形式不做限定。在一种实施方式中,可以将代码行作为拆分粒度,即将初始py源码拆分为一行行的代码,进而进行匹配;在另一种实施方式中,可以将功能模块作为拆分粒度,将初始py源码拆分为若干个代码模块,进而进行匹配。
在上述两种实施方式中,拆分粒度为单个,在另一种可行的实施方式中,可以设置若干个拆分粒度,并设置各个拆分粒度之间的优先级。在进行拆分和共性部分提取时,可以先按照优先级高的拆分粒度进行拆分,拆分后进行共性部分提取;将共性部分排除后,在剩余的初始py源码中进行下一优先级的拆分粒度的拆分,拆分后进行共性部分提取。持续执行上述步骤,直至所有优先级的拆分粒度均被使用,将每次共性部分提取得到的结果均确定为共性py源码。
本实施例并不限定共性部分提取的具体方式,在一种实施方式中,若拆分得到的部分初始py源码在各个初始py源码中的存在的比例高于预设阈值,则确定该部分初始py源码为共性部分,即共性py源码。
S102:利用打包工具对共性py源码进行处理,得到py组件和pyc组件。
S103:将py组件和pyc组件分别上传至对应的组件库。
在得到py源码后,对其进行打包,即可得到能够在项目部署时被调用的组件,包括py组件和pyc组件。其中,打包工具中包括编译工具,编译工具用于对共性py源码进行编译处理得到pyc数据,打包工具对共性py源码打包得到py组件,对pyc数据打包得到pyc组件。编译工具用于对py源码进行编译,打包工具和编译工具的具体类型不做限定。通过在打包的过程中对共性py源码进行编译得到pyc数据,并利用pyc数据打包得到pyc组件。py组件能够应用于开发场景中,pyc组件能够应用于发版场景中,这使得打包的结果能够适用于不同开发场景和环境的需求。本实施例并不限定打包和编码的具体过程,可以参考相关技术,在此不做赘述。在打包完成后,将不同类型的组件分别上传至对应的组件库,即将py组件和pyc组件分别上传至不同的组件库,以便后续对其进行调用。
进一步,为了进一步提高满足多场景多环境开发需求的能力,在一种实施方式中,编译工具的数量大于一个,且各个编译工具对应于不同的版本。在这种情况下,利用打包工具对共性py源码进行处理,得到py组件和pyc组件的过程可以包括:
步骤21:分别利用各个编译工具对共性py源码进行编译处理,得到若干个不同版本的pyc数据。
步骤22:根据打包工具的打包属性,分别对共性py源码和pyc数据打包,得到py组件和pyc组件。
在本实施方式中,多个编译工具分别对应于不同的版本,即Python版本。不同版本的编译方式不同,在进行某一版本的项目发版时,其他版本的pyc数据通常无法通用。通过利用各个编译工具分别对同一个共性py源码进行编译,可以得到各个版本的pyc数据。在编译完成后,根据打包属性对共性py源码和pyc数据分别进行打包,可以得到一个py组件和若干个不同版本的pyc组件。打包属性,是指指导打包操作执行的属性数据,其具体内容不做限定,例如可以为打包形式、组件名称等。
相应的,将py组件和pyc组件分别上传至对应的组件库的过程可以包括:
步骤23:根据组件类型和组件版本,将py组件和pyc组件分别上传至对应的组件库。
由于pyc组件存在多个组件版本,因此可以根据类型和版本的不同,分别将py组件和各个pyc组件上传至对应的组件库。
基于上述过程,在一种实施方式中,共性py源码和pyc数据的打包属性相同,即打包过程采用一套完全相同的打包属性。在另一种实施方式中,各个数据对应的打包属性可以不同,在这种情况下,可以执行如下步骤:
步骤31:利用获取到的属性设置信息,设置共性py源码对应的第一打包属性和/或各个版本的pyc数据分别对应的第二打包属性。
属性设置信息,是指用于对指定的打包属性进行设置的信息。利用其可以设置与共性py源码对应的第一打包属性,或者可以设置与某个版本的pyc数据对应的第二打包属性。具体的设置方式不做限定,例如可以利用属性设置信息中的部分数据对第一打包属性或第二打包属性中的部分内容进行替换,或者基于属性设置信息中的设置方式对第一打包属性或第二打包属性进行设置。
在将组件上传至组件库后,可以调用组件库完成项目部署。具体的,可以执行如下步骤:
步骤41:获取项目信息;项目信息用于说明项目与对应的目标组件的依赖关系,目标组件为py组件或pyc组件。
步骤42:利用项目信息构建虚拟集合组件,并将虚拟集合组件上传至对应的组件库。
步骤43:若检测到项目部署指令,则利用虚拟集合组件和目标组件部署项目。
其中,项目信息用于说明项目与对应的目标组件的依赖关系,即项目代码对目标组件的调用关系,其具体可以说明调用了哪些目标组件,以及在什么位置调用该组件。根据项目类型和版本的不同,目标组件可以为py组件或pyc组件。
虚拟集合组件,即Virtual Collection Component,VCC。虚拟集合组件根据项目信息构建,其中记录了项目信息记录的依赖关系,其可以被安装至Python中并运行,完成项目的部署。在将其上传至组件库后,在检测到对应的项目部署指令时,可以利用虚拟集合组件和目标组件部署项目。具体的,若检测到项目部署指令,则利用虚拟集合组件和目标组件部署项目的步骤可以包括:
步骤51:若检测到项目部署指令,则确定项目部署指令对应的目标虚拟集合组件。
步骤52:将目标虚拟集合组件安装至项目环境中,并运行目标虚拟集合组件;目标虚拟集合组件在运行过程中调用目标组件。
在将目标虚拟集合组件安装至项目环境中后,运行该目标虚拟集合组件的过程中,目标虚拟集合组件在运行过程中,会按照其记录的依赖关系调用目标组件,目标组件被调用完成后即可完成项目的部署。目标组建的具体调用方式和过程不做限定。
基于上述的项目部署方式,在项目需要修改时,可以对虚拟集合组件进行更新,而并不用对组件进行更新,减少了更新的工作量。具体的,若检测到更新指令,则根据更新指令更新虚拟集合组件。其中更新指令,用于对指定的虚拟集合组件进行更新,其还可以指定具体的更新方式。
请参考图2,图2为本申请实施例提供的一种具体的项目部署方法流程图。在项目部署过程中,首先将已有程序(即初始py源码)中的公共函数、算法、模块、功能(即共性py源码)等整合独立,在传统的setup.py打包工具中添加若干套setup属性集(即打包属性),分别作为源码py文件(即py组件)和编译pyc文件(即pyc组件)的打包属性集,此时的pyc文件作为一种非py文件的属性形式存在。同时,打包工具中增加调用build编译工具,编译工具为多个,对应于多个不同版本的python,以制作出不同版本的编译包。具体步骤:
步骤一:从程序中将成熟的功能、模块、函数、算法等分离独立出来;
步骤二:创建setup.py打包工具;
步骤三:在setup.py打包工具中另增加若干套setup属性集作为pyc文件的打包属性,pyc文件作为非py文件的属性形式存在;
步骤四:在打包工具中增加build编译工具,具体增加多个不同版本的python编译工具用于执行编译;
步骤五:同步一键将多种版本的组件上传至不同性质的pypi制品库(即组件库)。
使用优化后的setup.py工具进行打包上传,将py文件与pyc文件分别自动上传至不同的pypi制品库,以供开发调试和部署发版两种场景使用。在将各功能模块或公共组件上传完成后,存在针对不同项目所需的组件集不同(组件功能类别、版本、场景等)的可能情况,因此针对各项目功能特征制作项目专属的虚拟集合组件,记录该项目所需的组件与该虚拟集合组件的依赖从属关系,并打包上传:具体步骤:
步骤一:整理不同项目功能所需组件(组件类别、版本、使用场景);
步骤二:针对不同项目制作虚拟集合组件VCC,设置该虚拟组件setup属性,将项目所需所有组件作为该虚拟组件依赖形式存在;
步骤三:打包上传VCC至各制品库,使用时pip一键安装该虚拟组件至项目python环境的packages文件夹中,实现所需所有组件的安装使用。后期各组件升级后针对项目只关注和维护该虚拟组件即可,缩短项目开发周期。
应用本申请实施例提供的组件生成方法,首先获取多个共性py源码,共性py源码为在项目代码中被经常使用的py源码,通过获取共性py源码并利用打包工具对其进行处理得到py组件,可以在多个项目中复用该py组件,减少项目的代码体量,提高复用程度。此外,打包工具中还包括编译工具,编译工具对共性py源码进行编译处理得到pyc数据。pyc数据和py数据分别用在发版的应用场景和开发的应用场景,在生成py组件的同时,同时生成对应的pyc组件,并将py组件和pyc组件分别上传至对应的组件库,使得用户可以根据开发场景和环境选择所需要的类型的组件进行调用,满足了多场景多环境开发需求,解决了相关技术存在的代码体量过大、复用程度低、难以满足多场景多环境开发需求的问题。
下面对本申请实施例提供的组件生成装置进行介绍,下文描述的组件生成装置与上文描述的组件生成方法可相互对应参照。
请参考图3,图3为本申请实施例提供的一种组件生成装置的结构示意图,包括:
获取模块110,用于获取多个共性py源码;
打包模块120,用于利用打包工具对共性py源码进行处理,得到py组件和pyc组件;其中,打包工具中包括编译工具,编译工具用于对共性py源码进行编译处理得到pyc数据,打包工具对共性py源码打包得到py组件,对pyc数据打包得到pyc组件;
上传模块130,用于将py组件和pyc组件分别上传至对应的组件库。
可选地,编译工具的数量大于一个,且各个编译工具对应于不同的版本;
打包模块120,包括:
编译单元,用于分别利用各个编译工具对共性py源码进行编译处理,得到若干个不同版本的pyc数据;
打包单元,用于根据打包工具的打包属性,分别对共性py源码和pyc数据打包,得到py组件和pyc组件;
相应的,上传模块130,包括:
上传单元,用于根据组件类型和组件版本,将py组件和pyc组件分别上传至对应的组件库。
可选地,还包括:
属性设置模块,用于利用获取到的属性设置信息,设置共性py源码对应的第一打包属性和/或各个版本的pyc数据分别对应的第二打包属性。
可选地,获取模块110,包括:
获取单元,用于获取若干个初始py源码;
拆分单元,用于对初始py源码进行拆分和共性部分提取,得到多个共性py源码。
可选地,还包括:
项目信息获取模块,用于获取项目信息;项目信息用于说明项目与对应的目标组件的依赖关系,目标组件为py组件或pyc组件;
构建模块,用于利用项目信息构建虚拟集合组件,并将虚拟集合组件上传至对应的组件库;
部署模块,用于若检测到项目部署指令,则利用虚拟集合组件和目标组件部署项目。
可选地,部署模块,包括:
目标确定单元,用于若检测到项目部署指令,则确定项目部署指令对应的目标虚拟集合组件;
安装单元,用于将目标虚拟集合组件安装至项目环境中,并运行目标虚拟集合组件;目标虚拟集合组件在运行过程中调用目标组件。
可选地,还包括:
更新模块,用于若检测到更新指令,则根据更新指令更新虚拟集合组件。
下面对本申请实施例提供的电子设备进行介绍,下文描述的电子设备与上文描述的组件生成方法可相互对应参照。
请参考图4,图4为本申请实施例提供的一种电子设备的结构示意图。其中电子设备100可以包括处理器101和存储器102,还可以进一步包括多媒体组件103、信息输入/信息输出(I/O)接口104以及通信组件105中的一种或多种。
其中,处理器101用于控制电子设备100的整体操作,以完成上述的组件生成方法中的全部或部分步骤;存储器102用于存储各种类型的数据以支持在电子设备100的操作,这些数据例如可以包括用于在该电子设备100上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器102可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,SRAM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、只读存储器(Read-OnlyMemory,ROM)、磁存储器、快闪存储器、磁盘或光盘中的一种或多种。
多媒体组件103可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器102或通过通信组件105发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口104为处理器101和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件105用于电子设备100与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near Field Communication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件105可以包括:Wi-Fi部件,蓝牙部件,NFC部件。
电子设备100可以被一个或多个应用专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、数字信号处理器(Digital Signal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field ProgrammableGate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述实施例给出的组件生成方法。
下面对本申请实施例提供的计算机可读存储介质进行介绍,下文描述的计算机可读存储介质与上文描述的组件生成方法可相互对应参照。
本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述的组件生成方法的步骤。
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本领域技术人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应该认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系属于仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语包括、包含或者其他任何变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
- 一种组件生成方法、装置、电子设备及可读存储介质
- 视频生成方法、视频生成装置、电子设备和可读存储介质