CN108519874B - Python项目包的生成方法及装置 - Google Patents

Python项目包的生成方法及装置 Download PDF

Info

Publication number
CN108519874B
CN108519874B CN201710109306.4A CN201710109306A CN108519874B CN 108519874 B CN108519874 B CN 108519874B CN 201710109306 A CN201710109306 A CN 201710109306A CN 108519874 B CN108519874 B CN 108519874B
Authority
CN
China
Prior art keywords
package
file
project
python
code
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.)
Active
Application number
CN201710109306.4A
Other languages
English (en)
Other versions
CN108519874A (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201710109306.4A priority Critical patent/CN108519874B/zh
Publication of CN108519874A publication Critical patent/CN108519874A/zh
Application granted granted Critical
Publication of CN108519874B publication Critical patent/CN108519874B/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/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Abstract

本发明公开了一种Python项目包的生成方法及装置,属于计算机技术领域。该方法包括:读取Python项目的代码文件、资源文件和依赖信息;将代码文件、资源文件和依赖信息分别进行打包,得到相应的代码包、资源包和依赖包;根据代码包、资源包和依赖包,生成Python项目包,Python项目包用于部署Python项目;本发明通过根据代码包、资源包和依赖包,生成Python项目包,使得该Python项目包中不仅包括该Python项目的代码文件,还包括该Python项目正常运行时所需要的资源文件和依赖信息,避免了由于下载失败或下载的依赖信息错误而导致安装失败的情况,确保了Python项目能够部署成功。

Description

Python项目包的生成方法及装置
技术领域
本发明实施例涉及计算机技术领域,特别涉及一种Python项目包的生成方法及装置。
背景技术
Python语言是一种面向对象、解释型的计算机程序语言。随着Python语言在行业内的应用越来越多,出现了多种多样的Python项目。研发完毕的Python项目的项目代码会打包成Python项目包,将Python项目包提供给用户进行标准化的安装。
相关技术中为Python项目提供了软件包管理系统pip,Python项目包的生成方法如下:pip从SVN(Subversion,版本管理工具)中获取指定的Python项目的版本信息,根据该版本信息读取代码文件,并使用官方打包方式将该代码文件打包成代码包,再将该代码包保存到与该Python项目对应的文档目录的相应文件夹中,从而根据该文档目录内的所有文件压缩得到Python项目包。
在上述技术中,该Python项目包中只对该Python项目的代码文件进行了打包,该Python项目包中并不包括该Python项目的代码文件正常运行时所需要的其它数据信息,若缺失这些信息,则Python项目部署后无法成功运行;同时在后续安装该Python项目包的过程中,还需要联网下载该代码文件所需要的其它数据信息才能进行正常安装,若下载的其它数据信息错误或下载失败,则会导致该Python项目包安装失败。
发明内容
为了解决Python项目包中只对该Python项目的代码文件进行了打包,容易导致该Python项目包在部署时安装失败的问题,本发明实施例提供了一种Python项目包的生成方法及装置。所述技术方案如下:
第一方面,提供了一种Python项目包的生成方法,所述方法包括:
读取Python项目的代码文件、资源文件和依赖信息;
将所述代码文件、所述资源文件和所述依赖信息分别进行打包,得到相应的代码包、资源包和依赖包;
根据所述代码包、所述资源包和所述依赖包,生成所述Python项目包,所述Python项目包用于部署所述Python项目;
其中,所述代码文件包括所述Python项目本身的代码内容,所述资源文件包括所述Python项目所对应的文件资源,所述依赖信息用于指示所述Python项目部署时所依赖的其它代码内容和/或其它资源。
第二方面,提供了一种Python项目包的生成装置,其特征在于,所述装置包括:
读取模块,用于读取Python项目的代码文件、资源文件和依赖信息;
打包模块,用于将所述代码文件、所述资源文件和所述依赖信息分别进行打包,得到相应的代码包、资源包和依赖包;
生成模块,用于根据所述代码包、所述资源包和所述依赖包,生成所述Python项目包,所述Python项目包用于部署所述Python项目;
其中,所述代码文件包括所述Python项目本身的代码内容,所述资源文件包括所述Python项目所对应的文件资源,所述依赖信息用于指示所述Python项目部署时所依赖的其它代码内容和/或其它资源。
本发明实施例提供的技术方案带来的有益效果是:
通过将读取到的代码文件、资源文件和依赖信息分别进行打包,得到相应的代码包、资源包和依赖包,根据代码包、资源包和依赖包,生成Python项目包;使得该Python项目包中不仅包括该Python项目的代码文件,还包括该Python项目正常运行时所需要的资源文件和依赖信息,从而使得在后续将该Python项目包解压后,无需再联网下载依赖信息,避免了由于下载失败或下载的依赖信息错误而导致安装失败的情况;并且,由于Python项目包是根据存储有资源文件的资源包生成的,避免了在后续将该Python项目包解压后研发人员还需要手动复制资源文件或手动输入该资源文件的地址添加该资源文件的情况,使得在不同的版本管理工具和部署方法下,仍然能够对Python项目部署成功。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例所涉及的Python项目包生成系统的示意图;
图2是本发明一个实施例提供的Python项目包的生成方法的流程图;
图3A是本发明另一个实施例提供的Python项目包的生成方法的流程图;
图3B是本发明另一个实施例提供的Python项目的项目结构的示意图;
图3C是本发明另一个实施例提供的Python项目包的生成方法所涉及的主文件目录的示意图;
图3D是本发明另一个实施例提供的压缩工具对Python项目包进行压缩时的界面示意图;
图3E是本发明另一个实施例提供的Python项目包的生成方法的流程图;
图3F是本发明另一个实施例提供的Python项目包的生成方法的流程图;
图4是本发明另一个实施例提供的Python项目包的生成方法的原理示意图;
图5是本发明一个实施例提供的Python项目包的部署方法的流程图;
图6是本发明一个实施例提供的Python项目包的生成装置的结构图;
图7是本发明一个实施例提供的Python项目包的生成装置的结构图;
图8是本发明一个实施例提供的服务器的结构方框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1,其示出了本发明实施例所涉及的Python项目包生成系统的示意图。该系统包括:开发者终端110、版本管理服务器120、打包服务器130和pip社区服务器140。
开发者终端110是一个终端,或者若干个终端,比如开发者终端110包括开发者A所使用的终端、开发者B所使用的终端和开发者C所使用的终端。开发者终端110用于将研发出的与Python项目相关的代码和/文件发送给版本管理服务器120。可选地,Python项目还可称为Python软件、Python应用程序。
版本管理服务器120中安装有版本管理工具,版本管理工具存储有各个研发完毕的Python项目的版本信息,版本管理服务器120用于将指定的Python项目的版本信息发送给打包服务器130;对应的,打包服务器130通过打包工具从版本管理服务器120的版本管理工具中获取到指定的Python项目的版本信息,根据该版本信息读取Python项目的代码文件、资源文件和依赖信息。
其中,Python项目是基于Python语言研发的软件项目,Python语言通常是用来开发服务器的程序,所以在相关技术中,代码文件和资源文件是分离开的,需要研发人员在安装部署Python项目后,手动在已成功安装的Python项目中配置相应的资源文件,比如:手动复制资源文件或手动输入该资源文件的地址从而添加该资源文件;而在本发明实施例中,打包服务器130将读取到的代码文件、资源文件和依赖信息分别进行打包,得到相应的代码包、资源包和依赖包,根据代码包、资源包和依赖包,生成Python项目包,由于Python项目包是根据存储有资源文件的资源包生成的,避免了在后续将该Python项目包解压后研发人员还需要进行手动配置的情况。
需要说明的是,版本管理服务器120与打包服务器130可以是两台独立的服务器,也可以是同一台服务器;若是同一台服务器,则在该服务器中安装有打包工具和版本管理工具,打包工具从版本管理工具中获取到指定的Python项目的版本信息。
打包服务器130通过打包工具读取到的依赖信息,从pip社区服务器140中下载至少一个依赖文件。
可选的,研发服务器110、版本管理服务器120、打包服务器130属于同一个局域网150中,打包服务器130与pip社区服务器140通过通信网络相连,该通信网络是有线网络或无线网络。
该pip社区服务器140是一台服务器,或者是若干台服务器,或者是一个虚拟化平台,或者是一个云计算服务中心。研发服务器140用于将下载好的依赖文件发送给打包服务器130,以使得打包服务器130将依赖文件进行打包得到相应的依赖包。
可选地,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于局域网(Local Area Network,LAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合)。在一些实施例中,使用包括超文本标记语言(Hyper Text Mark-up Language,HTML)、可扩展标记语言(Extensible MarkupLanguage,XML)等的技术和/或格式来代表通过网络交换的数据。此外还可以使用诸如安全套接字层(Secure Socket Layer,SSL)、传输层安全(Transport Layer Security,TLS)、虚拟专用网络(Virtual Private Network,VPN)、网际协议安全(Internet ProtocolSecurity,IPsec)等常规加密技术来加密所有或者一些链路。在另一些实施例中,还可以使用定制和/或专用数据通信技术取代或者补充上述数据通信技术。
请参考图2,其示出了本发明一个实施例提供的Python项目包的生成方法的流程图。该方法包括:
步骤201,读取Python项目的代码文件、资源文件和依赖信息。
可选的,打包工具从版本管理工具中获取指定的Python项目的版本信息,根据该版本信息读取Python项目的代码文件、资源文件和依赖信息;示意性的,该打包工具是自主研发的用于打包的工具,或者是修改后的pip或setuptools工具;该版本管理工具为SVN。
其中,Python项目是基于Python语言研发的软件项目,技术人员在研发该Python项目时确定了该Python项目的代码文件、资源文件和依赖信息。
可选地,代码文件包括Python项目本身的代码内容,该代码内容为技术人员基于该Python项目自主研发的代码;资源文件包括Python项目所对应的文件资源,比如:图片资源、音频资源、视频资源和网页资源中的至少一种,该文件资源为在该Python项目运行时需要使用的资源;依赖信息用于指示Python项目部署时所依赖的其它代码内容和/或其它资源,即该代码文件与依赖信息存在依赖关系,在后续安装Python项目时除了需要代码文件,还需要依赖信息才能进行正常安装和运行。
步骤202,将代码文件、资源文件和依赖信息分别进行打包,得到相应的代码包、资源包和依赖包。
可选的,打包工具将代码文件打包得到代码包,将资源文件打包得到资源包,将依赖信息打包得到依赖包。
可选的,这三种打包操作是互相独立,这三种打包操作可以是串行执行或并列执行,本实施例对这三种打包操作的打包方式和打包顺序不加以限定。
步骤203,根据代码包、资源包和依赖包,生成Python项目包,Python项目包用于部署Python项目。
可选的,打包工具对Python项目的安装脚本程序进行编译,然后压缩编译后的安装脚本程序及该Python项目的代码包、资源包和依赖包,得到Python项目包。
其中,Python项目包用于解压且安装后运行该Python项目,或,用于解压后直接运行该Python项目。
综上所述,本实施例通过将读取到的代码文件、资源文件和依赖信息分别进行打包,得到相应的代码包、资源包和依赖包,根据代码包、资源包和依赖包,生成Python项目包;使得该Python项目包中不仅包括该Python项目的代码文件,还包括该Python项目正常运行时所需要的资源文件和依赖信息,从而使得在后续将该Python项目包解压后,无需再联网下载依赖信息,避免了由于下载失败或下载的依赖信息错误而导致安装失败的情况;并且,由于Python项目包是根据存储有资源文件的资源包生成的,避免了在后续将该Python项目包解压后研发人员还需要手动复制资源文件或手动输入该资源文件的地址添加该资源文件的情况,使得在不同的版本管理工具和部署方法下,仍然能够对Python项目部署成功。
请参考图3A,其示出了本发明另一个实施例提供的一种Python项目包的生成方法的流程图。该方法包括:
步骤301,获取Python项目的版本信息,版本信息用于指示代码文件的第一版本和资源文件的第二版本。
可选的,打包工具从SVN中获取Python项目的版本信息,该版本信息包括一个版本号或两个版本号。
可选的,当版本信息包括一个版本号时,该版本号用于指示代码文件的第一版本和资源文件的第二版本,若代码文件的第一版本更新或资源文件的第二版本更新,则该版本号更新。
结合参考表一,当前的代码文件的第一版本为201610x,资源文件的第二版本为201610y,版本信息中的版本号为10091,在代码文件的第一版本更新时,该版本号由10091更新为10092,之后在资源文件的第二版本更新时,该版本号由10092更新为10093。
表一
版本信息 第一版本 第二版本
10091 201610x 201610y
10092 201611x 201610y
10093 201611x 201611y
可选的,当版本信息包括两个版本号时,一个版本号用于指示代码文件的第一版本,另一个版本号用于指示资源文件的第二版本,若代码文件的第一版本更新时,则与第一版本对应的版本号更新;若资源文件的第二版本更新时,则与第二版本对应的版本号更新。
结合参考表一,当前的代码文件的第一版本为201610x,资源文件的第二版本为201610y,版本信息包括版本号A和版本号B,与第一版本对应的版本号A为201610x,与第二版本对应的版本号B为201610y,在代码文件的第一版本更新为201611x时,该版本号A由201610x更新为201611x,之后在资源文件的第二版本更新为201611y时,该版本号B由201610y更新为201611y。也即,两个版本号互相独立。
表二
Figure BDA0001233978470000071
可选的,打包工具读取项目信息,该项目信息包括与Python项目有关的基本数据,将版本信息和项目信息保存至主文件目录中,主文件目录为针对Python项目打包时所创建的目录。
其中,打包工具根据预设的配置文件模板创建主文件目录,该预设的配置文件模板是技术人员开发的,用于生成Python项目的项目包;在创建后主文件目录后,打包工具将版本信息和项目信息拷贝至主文件目录中。
步骤302,根据版本信息,读取代码文件和资源文件。
可选的,打包工具根据版本信息,同时读取代码文件和资源文件;本实施例对代码文件和资源文件的读取顺序不加以限定。
步骤303,根据读取到的代码文件,读取与代码文件存在依赖关系的依赖信息。
可选的,打包工具根据读取到的代码文件,读取与代码文件存在依赖关系的依赖信息。
结合参考图3B,根据该Python项目的项目结构,打包工具读取该Python项目中的setup.py文件,根据setup.py文件确定Python项目自身的代码文件;打包工具读取rich_package.json文件中标识的资源文件或资源文件夹;打包工具根据读取到的代码文件,从requirements_info文件夹中读取依赖信息。
步骤304,对于代码文件,使用预定打包方式打包代码文件得到代码包,预定打包方式为针对代码文件预先设置的打包方式。
可选的,对于代码文件,打包工具使用预定打包方式打包代码文件得到代码包;示意性的,预定打包方式为代码文件的官方打包方式或研发人员基于该Python项目所指定的打包方式。
步骤305,对于资源文件,将资源文件打包为资源包。
可选的,对于资源文件,打包工具将资源文件中存储的该Python项目运行时需要使用的资源进行打包,得到资源包。
步骤306,对于依赖信息,根据依赖信息下载至少一个依赖文件,并将依赖文件打包为依赖包。
可选的,对于依赖信息,打包工具根据读取的依赖信息联网下载至少一个依赖文件,将下载完毕的依赖文件打包成依赖包。
需要说明的是,步骤304、步骤305和步骤306这三个步骤不分先后顺序,可以并列执行,也可以串行执行,本实施例对代码文件、资源文件和依赖信息这三种打包操作的打包方式和打包顺序不加以限定。
步骤307,将代码包和依赖包保存至主文件目录下的第一子文件目录中,并将资源包拷贝到主文件目录中。
其中,主文件目录为针对Python项目打包时所创建的目录,第一子文件目录用于保存Python项目安装时所需的配置信息和/或代码信息。
可选的,打包工具将代码包和依赖包保存至主文件目录下的第一子文件目录中,并将资源包拷贝到主文件目录中。
结合参考图3C,打包工具预先创建的主文件目录MyApps下的第一子文件目录包括requirements_info文件夹,将代码包和依赖包保存至requirements_info文件夹中,将资源包拷贝到主文件目录MyApps中。
步骤308,获取待生成的Python项目包的项目包类型,项目包类型为离线安装包或离线可执行包。
可选的,研发人员选择待生成的Python项目包的项目包类型,打包工具获取研发人员选择的项目包类型,项目包类型为离线安装包或离线可执行包。
其中,离线安装包用于解压且安装后运行Python项目,离线可执行包用于解压后直接运行Python项目;示意性的,离线安装包的包扩展名为.rich,离线安装包的包扩展名为.rich_running。
需要说明的是,离线安装包和离线可执行包均可以用于在离线状态下部署Python项目(但用户也可以在联网状态下部署Python项目,但不需要下载其他数据信息),本实施例对此不加以限定。
步骤309,根据与项目包类型对应的生成方式,将主文件目录内的代码和/或文件生成为Python项目包。
可选的,打包工具根据与项目包类型对应的生成方式,将主文件目录内的代码和/或文件,压缩生成为Python项目包。
结合参考图3D,其示出了Python项目包的生成过程中的界面示意图。在该可选的实施例中,打包工具提供的用户界面上显示有三个输入提示信息及对应可填的输入项、一个选择提示信息及对应的二选一的选择项和三个按钮;在研发人员进行输入和选择后,第一个输入提示信息“输入版本号”对应的输入项为“10093”,第二个输入提示信息“输入项目包名称”对应的输入项为“12345.rich”,第三个输入提示信息“输入生成路径”对应的输入项为“D:\WorkSpace”,选择提示信息“项目包类型”对应的两个选择项分别为“离线安装包”和“离线可执行包”,在选择项目包类型为“离线安装包”并点击生成按钮时,打包工具在“D:\WorkSpace”目录下生成版本号为“10093”且项目类型为“离线安装包”的项目包“12345.rich”。
综上所述,通过将读取到的代码文件、资源文件和依赖信息分别进行打包,得到相应的代码包、资源包和依赖包,根据代码包、资源包和依赖包,生成Python项目包;使得该Python项目包中不仅包括该Python项目的代码文件,还包括该Python项目正常运行时所需要的资源文件和依赖信息,从而使得在后续将该Python项目包解压后,无需再联网下载依赖信息,避免了由于下载失败或下载的依赖信息错误而导致安装失败的情况;并且,由于Python项目包是根据存储有资源文件的资源包生成的,避免了在后续将该Python项目包解压后研发人员还需要手动复制资源文件或手动输入该资源文件的地址添加该资源文件的情况,使得在不同的版本管理工具和部署方法下,仍然能够对Python项目部署成功。
本实施例还通过根据依赖信息下载依赖文件,将依赖文件打包成依赖包,并根据该依赖包生成Python项目包,由于依赖文件已经在打包过程中下载好,在后续将打包好的Python项目包解压后,Python项目包中存储有该依赖包,使得打包工具无需再次联网下载依赖文件,使得在离线状态下仍然能够成功部署Python项目。
在一种可能的实现方式中,研发人员所选择的项目包类型为离线安装包,则步骤309可被替代实现成为步骤309a,如图3E所示:
步骤309a,将主文件目录内的代码和/或文件进行打包,压缩得到离线安装包。
可选的,打包工具将主文件目录内的版本信息、项目信息、资源包,和主文件目录的第一子文件目录内的代码包、依赖包以及其他数据进行整合打包,压缩得到离线安装包。
在另一种可能的实现方式中,项目包类型为离线可执行包,则步骤309可被替代实现成为步骤309b和步骤310b,如图3F所示:
步骤309b,将代码包和依赖包安装至主文件目录下的第二子文件目录中,第二子文件目录用于保存Python项目运行时所需的配置信息和/或代码信息。
可选的,打包工具将代码包和依赖包安装至主文件目录下的第二子文件目录中,以使得后续过程中离线可执行包进行解压后可直接运行Python项目,不需要再次联网进行安装操作。
比如,打包工具将代码包和依赖包安装至主文件目录下的第二子文件目录“contom_venv”中。
步骤310b,在安装成功后,将主文件目录内的代码和/或文件进行打包,压缩得到离线可执行包。
可选的,打包工具在安装成功后,将主文件目录内的版本信息、项目信息、资源包,和主文件目录的第一子文件目录内的代码包、依赖包,和主文件目录的第二子文件目录内的代码包、依赖包以及其他数据进行整合打包,压缩得到离线可执行包。
本实施例还通过打包工具将代码包和依赖包安装至主文件目录下的第二子文件目录中,在安装成功后,将主文件目录内的代码和/或文件进行打包,压缩得到离线可执行包,由于在打包过程中已经将代码包和依赖包安装至第二子文件目录中,因此在后续将打包好的离线可执行包解压后,无需再次进行安装操作,使得打包工具能够直接运行该离线可执行包对应的Python项目。
请参考图4,其示出了本发明另一个实施例提供的Python项目包的生成方法的原理示意图。其中,打包工具获取版本信息,根据版本信息读取项目信息、资源文件、代码文件,根据读取到的代码文件,读取与该代码文件存在依赖关系的依赖信息;打包工具将读取到的资源文件、代码文件和依赖信息分别进行打包,得到资源包、代码包和依赖包,将读取到的版本信息、项目信息和资源包复制到主文件目录内,将代码包和依赖包保存在主文件目录下的第一子文件目录内;判断选择的项目包类型是否为离线安装包;若是,则将主文件目录打包得到离线安装包;若不是,则项目包类型为离线可执行包,打包工具将代码包和依赖包安装在主文件目录下的第二子文件目录内,再将主文件目录打包得到离线可执行包。
在打包成Python项目包之后,打包工具将打包好的Python项目包提供给应用终端,使得用户通过应用终端部署Python项目。因此,下面介绍与上述实施例提供的Python项目包的生成方法相对应的Python项目包的部署方法,可以将该部署方法理解为上述生成方法的逆过程,具体的细节可参考上述实施例。
请参考图5,其示出了本发明一个实施例提供的一种Python项目包的部署方法的流程图。对于项目包类型为离线安装包或离线可执行包,该方法包括:
步骤501,应用终端获取Python项目包中的配置信息,配置信息用于指示代码包、资源包和依赖包的保存路径。
步骤502,应用终端根据配置信息,读取代码包、资源包和依赖包。
步骤503,应用终端将代码包、资源包和依赖包分别解压,得到相应的代码文件、资源文件和依赖信息。
步骤504,应用终端获取Python项目包的项目包类型,项目包类型为离线安装包或离线可执行包。
步骤505,应用终端根据与项目包类型对应的部署方式,部署Python项目。
在一种可能的实现方式中,项目包类型为离线安装包,应用终端根据代码文件和依赖信息安装Python项目;和/或,在安装完毕后,通过执行第一入口文件运行Python项目,第一入口文件存储在主文件目录中,主文件目录为针对Python项目打包时所创建的目录。
比如,在需要部署Python项目的设备上,将Python项目包解压到自定义文件夹“MyApps”,根据解压后得到的第一子文件目录中的代码文件和依赖信息安装Python项目;其中,相关代码和文件如下:
pip install-r requirements_info/requirements_dev_release.txt–frequirements_info/package_dev_local/
pip install-r requirements_info/requirements_pypi.txt-f requirements_info/pack age_pypi_local/
根据上面提供的代码和文件,应用终端根据配置信息“requirements_dev_release.txt”,从“package_dev_local”文件中读取代码文件,并将该代码文件安装到操作系统指定的位置;同样的,应用终端根据配置信息“requirements_pypi.txt”,从“package_pypi_local”文件读取依赖文件,并将该依赖文件安装到操作系统指定的位置;然后,应用终端执行第一入口文件“python–m cloud_tav_maintain.run_web_app”。
在另一种可能的实现方式中,项目包类型为离线可执行包,应用终端通过执行第二入口文件运行Python项目,第二入口文件存储在主文件目录下的第二子文件目录中,主文件目录为针对Python项目打包时所创建的目录,第二子文件目录用于保存Python项目运行时所需的配置信息和/或代码信息。
比如,在需要部署Python项目的设备上,将Python项目包解压到自定义文件夹“MyApps”,通过执行第二子文件目录“contom_venv”中的第二入口文件“contom_venv/bin/python–m cloud_tav_maintain.run_web_app”运行Python项目。
综上所述,本实施例通过应用终端根据配置信息,读取代码包、资源包和依赖包,将代码包、资源包和依赖包分别解压,得到相应的代码文件、资源文件和依赖信息,根据代码文件、资源文件和依赖信息,部署Python项目;由于该Python项目包中不仅包括该Python项目的代码文件,还包括该Python项目正常运行时所需要的资源文件和依赖信息,使得应用终端将该Python项目包解压后,无需再联网下载依赖信息,避免了由于下载失败或下载的依赖信息错误而导致安装失败的情况,并且,由于Python项目包是根据存储有资源文件的资源包生成的,避免了在将该Python项目包解压后研发人员还需要手动复制资源文件或手动输入该资源文件的地址添加该资源文件的情况,使得在不同的版本管理工具和部署方法下,仍然能够对Python项目部署成功。
本实施例还通过项目包类型为离线可执行包时,应用终端通过执行第二入口文件直接运行Python项目,由于在打包过程中已经将代码包和依赖包安装至第二子文件目录中,因此在将离线可执行包解压后,无需再次进行安装操作,使得应用终端能够直接运行该离线可执行包对应的Python项目。
下面为本发明中的装置实施例,对于装置实施例中未详尽描述的细节,可以结合参考上述一一对应的方法实施例。
请参考图6,其示出了本发明一个实施例提供的Python项目包的生成装置的结构图。该装置包括:
读取模块610,用于读取Python项目的代码文件、资源文件和依赖信息;
打包模块620,用于将代码文件、资源文件和依赖信息分别进行打包,得到相应的代码包、资源包和依赖包;
生成模块630,用于根据代码包、资源包和依赖包,生成Python项目包,Python项目包用于部署Python项目;
其中,代码文件包括Python项目本身的代码内容,资源文件包括Python项目所对应的文件资源,依赖信息用于指示Python项目部署时所依赖的其它代码内容和/或其它资源。
综上所述,本实施例通过将读取到的代码文件、资源文件和依赖信息分别进行打包,得到相应的代码包、资源包和依赖包,根据代码包、资源包和依赖包,生成Python项目包;使得该Python项目包中不仅包括该Python项目的代码文件,还包括该Python项目正常运行时所需要的资源文件和依赖信息,从而使得在后续将该Python项目包解压后,无需再联网下载依赖信息,避免了由于下载失败或下载的依赖信息错误而导致安装失败的情况;并且,由于Python项目包是根据存储有资源文件的资源包生成的,避免了在后续将该Python项目包解压后研发人员还需要手动复制资源文件或手动输入该资源文件的地址添加该资源文件的情况,使得在不同的版本管理工具和部署方法下,仍然能够对Python项目部署成功。
请参考图7,其示出了本发明另一个实施例提供的Python项目包的生成装置的结构图。基于图6提供的Python项目包的生成装置,该装置还包括:
打包模块620,包括:
第一打包单元621、第二打包单元622和第三打包单元623;
第一打包单元621,用于对于代码文件,使用预定打包方式打包代码文件得到代码包,预定打包方式为针对代码文件预先设置的打包方式;
第二打包单元622,用于对于资源文件,将资源文件打包为资源包;
第三打包单元623,用于对于依赖信息,根据依赖信息下载至少一个依赖文件,并将依赖文件打包为依赖包。
生成模块630,包括:
保存单元631、第一获取单元632和生成单元633;
保存单元631,用于将代码包和依赖包保存至主文件目录下的第一子文件目录中,并将资源包拷贝到主文件目录中;其中,主文件目录为针对Python项目打包时所创建的目录,第一子文件目录用于保存Python项目安装时所需的配置信息和/或代码信息;
第一获取单元632,用于获取待生成的Python项目包的项目包类型,项目包类型为离线安装包或离线可执行包;
生成单元633,用于根据与项目包类型对应的生成方式,将主文件目录内的代码和/或文件生成为Python项目包。
其中,离线安装包用于解压且安装后运行Python项目,离线可执行包用于解压后直接运行Python项目。
项目包类型为离线安装包;
生成单元633,用于将主文件目录内的代码和/或文件进行打包,压缩得到离线安装包。
项目包类型为离线可执行包;
生成单元633,包括:
安装子单元633a和打包子单元633b;
安装子单元633a,用于将代码包和依赖包安装至主文件目录下的第二子文件目录中,第二子文件目录用于保存Python项目运行时所需的配置信息和/或代码信息;
打包子单元633b,用于在安装成功后,将主文件目录内的代码和/或文件进行打包,压缩得到离线可执行包。
读取模块610,包括:
第二获取单元611、第一读取单元612和第二读取单元613;
第二获取单元611,用于获取Python项目的版本信息,版本信息用于指示代码文件的第一版本和资源文件的第二版本;
第一读取单元612,用于根据版本信息,读取代码文件和资源文件;
第二读取单元613,用于根据读取到的代码文件,读取与代码文件存在依赖关系的依赖信息。
综上所述,本实施例通过将读取到的代码文件、资源文件和依赖信息分别进行打包,得到相应的代码包、资源包和依赖包,根据代码包、资源包和依赖包,生成Python项目包;使得该Python项目包中不仅包括该Python项目的代码文件,还包括该Python项目正常运行时所需要的资源文件和依赖信息,从而使得在后续将该Python项目包解压后,无需再联网下载依赖信息,避免了由于下载失败或下载的依赖信息错误而导致安装失败的情况;并且,由于Python项目包是根据存储有资源文件的资源包生成的,避免了在后续将该Python项目包解压后研发人员还需要手动复制资源文件或手动输入该资源文件的地址添加该资源文件的情况,使得在不同的版本管理工具和部署方法下,仍然能够对Python项目部署成功。
需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
请参考图8,其示出了本发明一个实施例提供的服务器的结构框架图。该服务器800为打包服务器,具体来讲:所述服务器800包括中央处理单元(CPU)801、包括随机存取存储器(RAM)802和只读存储器(ROM)803的系统存储器804,以及连接系统存储器804和中央处理单元801的系统总线805。所述服务器800还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)806,和用于存储操作系统813、应用程序814和其他程序模块815的大容量存储设备807。
所述基本输入/输出系统806包括有用于显示信息的显示器808和用于用户输入信息的诸如鼠标、键盘之类的输入设备809。其中所述显示器808和输入设备809都通过连接到系统总线805的输入输出控制器810连接到中央处理单元801。所述基本输入/输出系统806还可以包括输入输出控制器810以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器810还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备807通过连接到系统总线805的大容量存储控制器(未示出)连接到中央处理单元801。所述大容量存储设备807及其相关联的计算机可读介质为服务器800提供非易失性存储。也就是说,所述大容量存储设备807可以包括诸如硬盘或者CD-ROI驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器804和大容量存储设备807可以统称为存储器。
根据本发明的各种实施例,所述服务器800还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器800可以通过连接在所述系统总线805上的网络接口单元811连接到网络812,或者说,也可以使用网络接口单元811来连接到其他类型的网络或远程计算机系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本发明实施例提供的Python项目包的生成方法中由服务器800所执行的步骤。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (5)

1.一种Python项目包的生成方法,其特征在于,所述方法用于打包服务器,所述打包服务器中安装有打包工具,所述方法包括:
获取Python项目的版本信息,所述版本信息用于指示代码文件的第一版本和资源文件的第二版本;
根据所述版本信息,读取所述代码文件和所述资源文件;
根据读取到的所述代码文件,读取与所述代码文件存在依赖关系的依赖信息;
使用预定打包方式打包所述代码文件得到代码包;
将资源文件中存储的Python项目运行时需要使用的资源进行打包,得到资源包;
根据所述依赖信息下载至少一个依赖文件,并将所述依赖文件打包为依赖包;
将所述代码包和所述依赖包保存至主文件目录下的第一子文件目录中,并将所述资源包拷贝到所述主文件目录中;其中,所述主文件目录为针对所述Python项目打包时所创建的目录,所述第一子文件目录用于保存所述Python项目安装时所需的配置信息和/或代码信息,所述配置信息用于指示代码包、资源包和依赖包的保存路径;
获取待生成的所述Python项目包的项目包类型,所述项目包类型为离线安装包或离线可执行包;其中,所述离线安装包用于解压且安装后运行所述Python项目,所述离线可执行包用于解压后直接运行所述Python项目;在所述项目包类型为离线安装包时,将所述主文件目录内的代码和/或文件生成为离线安装的所述Python项目包;
在所述项目包类型为离线可执行包时,将所述代码包和所述依赖包安装至所述主文件目录下的第二子文件目录中,并在安装成功后,将所述主文件目录内的代码和/或文件进行打包,得到离线可执行的所述Python项目包。
2.根据权利要求1所述的方法,其特征在于,所述版本信息通过所述打包工具从版本管理服务器处获取;所述依赖文件通过所述打包工具从pip社区服务器处获取。
3.一种Python项目包的生成装置,其特征在于,所述装置用于打包服务器,所述打包服务器中安装有打包工具,所述装置包括:
包含第二获取单元、第一读取单元和第二读取单元的读取模块,所述第二获取单元,用于获取Python项目的版本信息,所述版本信息用于指示代码文件的第一版本和资源文件的第二版本;
所述第一读取单元,用于根据所述版本信息,读取所述代码文件和所述资源文件;
所述第二读取单元,用于根据读取到的所述代码文件,读取与所述代码文件存在依赖关系的依赖信息;
打包模块,用于:使用预定打包方式打包所述代码文件得到代码包;将资源文件中存储的Python项目运行时需要使用的资源进行打包,得到资源包;根据所述依赖信息下载至少一个依赖文件,并将所述依赖文件打包为依赖包;
包含保存单元、第一获取单元和生成单元的生成模块,所述保存单元用于将所述代码包和所述依赖包保存至主文件目录下的第一子文件目录中,并将所述资源包拷贝到所述主文件目录中;其中,所述主文件目录为针对所述Python项目打包时所创建的目录,所述第一子文件目录用于保存所述Python项目安装时所需的配置信息和/或代码信息,所述配置信息用于指示代码包、资源包和依赖包的保存路径;
所述第一获取单元,用于获取待生成的所述Python项目包的项目包类型,所述项目包类型为离线安装包或离线可执行包;
所述生成单元,用于:在所述项目包类型为离线安装包时,将所述主文件目录内的代码和/或文件生成为离线安装的所述Python项目包;
在所述项目包类型为离线可执行包时,将所述代码包和所述依赖包安装至所述主文件目录下的第二子文件目录中,并在安装成功后,将所述主文件目录内的代码和/或文件进行打包,得到离线可执行的所述Python项目包。
4.根据权利要求3所述的装置,其特征在于,所述版本信息通过所述打包工具从版本管理服务器处获取;所述依赖文件通过所述打包工具从pip社区服务器处获取。
5.一种计算机可读存储介质,其上存储有程序指令,所述程序指令被处理器执行时实现如权利要求1至2中任一所述的Python项目包的生成方法。
CN201710109306.4A 2017-02-27 2017-02-27 Python项目包的生成方法及装置 Active CN108519874B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710109306.4A CN108519874B (zh) 2017-02-27 2017-02-27 Python项目包的生成方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710109306.4A CN108519874B (zh) 2017-02-27 2017-02-27 Python项目包的生成方法及装置

Publications (2)

Publication Number Publication Date
CN108519874A CN108519874A (zh) 2018-09-11
CN108519874B true CN108519874B (zh) 2022-03-29

Family

ID=63432636

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710109306.4A Active CN108519874B (zh) 2017-02-27 2017-02-27 Python项目包的生成方法及装置

Country Status (1)

Country Link
CN (1) CN108519874B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109857397A (zh) * 2019-01-18 2019-06-07 泰康保险集团股份有限公司 项目构建的方法、装置和存储介质
CN110442376A (zh) * 2019-07-19 2019-11-12 精硕科技(北京)股份有限公司 一种实现软件打包的方法及装置
CN110704096A (zh) * 2019-09-12 2020-01-17 北京达佳互联信息技术有限公司 前端项目的打包方法、装置、存储介质及电子设备
CN111124454B (zh) * 2019-12-25 2024-03-19 医渡云(北京)技术有限公司 镜像构建方法与装置、电子设备、存储介质
CN111258595B (zh) * 2020-03-13 2023-08-01 超越科技股份有限公司 一种基于PyInstaller的python源代码封装方法
CN111580834B (zh) * 2020-04-10 2021-10-29 北京城市网邻信息技术有限公司 一种应用安装包的生成方法和装置
CN115516419A (zh) * 2020-06-09 2022-12-23 深圳市欢太科技有限公司 一种应用安装方法、装置、设备及计算机可读存储介质
CN112835572B (zh) * 2021-01-29 2024-03-29 浪潮通用软件有限公司 一种依赖项目管理工具自定义引用流程的方法及设备
CN114756255B (zh) * 2022-06-14 2022-09-27 统信软件技术有限公司 一种离线包生成方法、一种软件包安装方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102035892A (zh) * 2010-12-23 2011-04-27 中科方德软件有限公司 操作系统版本自动发布和软件包自动更新的系统及方法
CN103544005A (zh) * 2013-09-10 2014-01-29 Tcl集团股份有限公司 一种Android自定义控件的扩展开发方法及装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008005102A2 (en) * 2006-05-13 2008-01-10 Sap Ag Consistent set of interfaces derived from a business object model
CN101311903B (zh) * 2007-05-22 2011-05-18 国际商业机器公司 对基于组件的软件系统中的组件进行重用的方法和装置
US8954954B2 (en) * 2010-04-30 2015-02-10 Blackberry Limited Method and device for application installation to multiple memory components
CN106134470B (zh) * 2012-02-08 2014-08-27 北京卫星制造厂 一种dnc集成管理系统与方法
CN103309646B (zh) * 2012-03-07 2017-11-14 腾讯科技(深圳)有限公司 一种软件本地化的方法和装置
US9569184B2 (en) * 2012-09-05 2017-02-14 Microsoft Technology Licensing, Llc Generating native code from intermediate language code for an application
CN102929643A (zh) * 2012-11-09 2013-02-13 北京中电普华信息技术有限公司 一种开发j2ee应用的方法及系统
US20150082298A1 (en) * 2013-09-19 2015-03-19 Qiu Shi WANG Packaging and deploying hybrid applications
CN104536744B (zh) * 2014-12-19 2018-07-13 微梦创科网络科技(中国)有限公司 一种自动化构建与部署代码的方法及服务器
CN105511889B (zh) * 2016-01-15 2020-01-07 珠海金山网络游戏科技有限公司 一种通用的游戏版本增量更新系统和方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102035892A (zh) * 2010-12-23 2011-04-27 中科方德软件有限公司 操作系统版本自动发布和软件包自动更新的系统及方法
CN103544005A (zh) * 2013-09-10 2014-01-29 Tcl集团股份有限公司 一种Android自定义控件的扩展开发方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"初学maven(5)-使用assembly plugin实现自定义打包";sky ao;《http://www.blogjava.net/aoxj/archive/2009/01/16/251615.html》;20090116;第1-6页 *

Also Published As

Publication number Publication date
CN108519874A (zh) 2018-09-11

Similar Documents

Publication Publication Date Title
CN108519874B (zh) Python项目包的生成方法及装置
CN108551487B (zh) PaaS平台的应用部署方法、装置、服务器及存储介质
CN108196915B (zh) 基于应用容器引擎的代码处理方法、设备及存储介质
CN106936633B (zh) 一种应用安装包制作的方法及服务器
CN105511911A (zh) 系统固件升级包的生成方法及装置
CN103309706A (zh) 基于Linux操作系统的内存文件系统制备方法及单元
CN111026439B (zh) 应用程序的兼容方法、装置、设备及计算机存储介质
CN114706564B (zh) 软件包制作方法、装置、电子设备及存储介质
WO2019056187A1 (zh) 应用部署方法、装置及系统
CN111309336A (zh) 分布式应用的部署方法及装置
CN111949276B (zh) 一种基于容器方式自动部署应用程序的系统及方法
CN112860282A (zh) 集群插件的升级方法、装置和服务器
CN113407194A (zh) 一种部署软件的方法和装置
CN116069341A (zh) 一种应用程序的自动化部署方法、设备及存储介质
CN113138768A (zh) 应用程序包生成方法、装置、电子设备以及可读存储介质
CN111611160B (zh) 一种软件测试方法、装置、设备及存储介质
CN113434146A (zh) 代码的编译方法、装置、存储介质及电子装置
CN115048112A (zh) 微服务部署方法、装置、电子设备和存储介质
CN112286543A (zh) 一种应用服务部署方法及装置
CN111610980A (zh) 部署系统及方法
CN104570967A (zh) 基于Android系统的远程控制方法及系统
CN115729604A (zh) 微应用集成方法、系统、电子设备和存储介质
CN113900674A (zh) 一种自动化部署方法、装置及存储介质
CN113326054A (zh) 软件部署方法和装置、计算机可读存储介质、电子设备
CN112433703B (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