CN107704256B - 一种Ubuntu上实现Python依赖系统库自动化安装的方法 - Google Patents
一种Ubuntu上实现Python依赖系统库自动化安装的方法 Download PDFInfo
- Publication number
- CN107704256B CN107704256B CN201710942032.7A CN201710942032A CN107704256B CN 107704256 B CN107704256 B CN 107704256B CN 201710942032 A CN201710942032 A CN 201710942032A CN 107704256 B CN107704256 B CN 107704256B
- Authority
- CN
- China
- Prior art keywords
- installation
- library
- package
- python
- system library
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种Ubuntu上实现Python依赖系统库自动化安装的方法,通过收集安装错误日志,并上传到云端;从错误日志中解析需要安装的系统库信息;根据系统环境变量,检索该系统上可用的库文件安装包;将解析出的系统库信息,结合操作系统信息,存储到包依赖关系数据库中,作为该操作系统下,安装该Python包的所需的系统库依赖;当有用户尝试安装新的Python包时,分析其上传的系统信息与Python包名,在包依赖关系数据库中检索依赖的系统库;再将依赖的系统库信息返回给安装程序;安装程序先安装系统库,再进行Python包安装。本发明实现依赖包的自动化安装,简化了Python包的安装流程,降低了技术门槛。
Description
技术领域
本发明涉及Python 开发技术领域,具体为一种Ubuntu上实现Python依赖系统库自动化安装的方法。
背景技术
Ubuntu 提供了一个良好的 Python 开发环境,但如果要在Ubuntu上使用Python开发出完成度较高的应用,还需要安装很多包(Package)。Python.org提供了一个官方的包管理仓库:PyPI,其中已收录了114254个包。另外GitHub等代码仓库中也收录了大量非官方包。一般情况下,这些包均可通过pip install方便的自动安装。但有的包依赖Ubuntu系统中的动态链接库,Lib头文件,源代码等。大部分依赖都非默认已安装的,在依赖未安装时若使用pip install安装这些包,会发生安装失败。且处理这类异常对于初中级Python程序员来说是极具挑战的工作。经验老道的程序员需要分析错误日志并结合Google等科学工具和输入复杂的指令才能处理好依赖关系完成所需的Python包安装。
术语解释:
Python: 一种面向对象的解释型计算机程序设计语言,由荷兰人Guido vanRossum于1989年发明,第一个公开发行版发行于1991年。
Ubuntu: 一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于DebianGNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的。
PyPI: (Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。
系统库:linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同,静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。共享库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。
HTTP: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
客户端:客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。对于这一类应用程序,需要网络中有相应的服务器和服务程序来提供相应的服务,如数据库服务,电子邮件服务等等,这样在客户机和服务器端,需要建立特定的通信连接,来保证应用程序的正常运行。
云端:云是指你作为接受服务的对象,是云端,不管你在何时何地,都能享受云计算提供的服务。云是网络、互联网的一种比喻说法。云分为私有云、公有云、混合云及行业云等等。云在勾画网络拓扑或网络结构时常见,过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象。
auto_pip: 以本专利方案实现的自动化Python包安装程序。
发明内容
针对上述问题,本发明的目的在于提供一种能够简化Python包的安装流程,降低技术门槛,无论对于初级和高级Python程序员,均可节省时间和精力的Ubuntu上实现Python依赖系统库自动化安装的方法。技术方法如下:
一种Ubuntu上实现Python依赖系统库自动化安装的方法,包括以下步骤:
步骤1:信息收集:经用户授权后,收集安装错误日志、系统环境变量、系统参数和内核参数信息,并由客户端将信息上传到云端;
步骤2:信息分析:分析收集到的信息,从错误日志中解析需要安装的系统库信息,根据系统环境变量,检索需要安装的系统库列表;检索不到时尝试对比用户手动成功安装前后的系统库列表,分析出过程中安装的各种系统库,再尝试检索需要安装的系统库列表;若依然检索不到,尝试将该Python包安装失败的用户环境与另一相同操作系统下成功安装该Python包的用户环境作对比,再尝试检索需要安装的系统库列表;
步骤3:包依赖关系构建:将解析出的系统库信息,结合操作系统信息,存储到包依赖关系数据库中,作为该操作系统下,安装该Python包的所需的系统库依赖;
步骤4:依赖关系检索:当有用户尝试安装新的Python包时,分析其上传的系统信息与Python包名,在包依赖关系数据库中检索依赖的系统库;再将依赖的系统库信息返回给安装程序;
步骤5:自动安装依赖:安装程序收到依赖的系统库信息后,调用系统的库安装程序,先安装系统库,再进行Python包安装。
进一步的,所述步骤1之前还包括:在安装auto_pip程序时,提示用户该程序会收集系统信息与日志信息并上传到云端,并等待用户同意。
更进一步的,所述客户端与云端的通信用HTTP协议完成。
更进一步的,根据用户指令进行安装auto_pip install PIL时,收集系统参数、用户输入的指令与start_install标记一起上传,并通知云端安装流程开始;云端将包名、包版本、系统内核版本、系统发行版作为查询条件,从系统库依赖数据库中查询该系统环境下该包的安装依赖;若查询到依赖关系,则直接返回系统库名给auto_pip程序;auto_pip判断所需依赖是否已安装,若有需要新装的依赖系统库,则调用系统层库安装程序,先安装所需的系统库,再进行包安装;若未检索到,则返回no_result标志给客户端,客户端将直接尝试安装Python包。
更进一步的,所述包安装过程中返回任何系统错误码则将全过程安装日志连同install_error标志一起上传到云端,标示安装过程中遇到异常。
更进一步的,所述云端收到install_error标志,进行用户错误日志分析,并利用正则表达式匹配日志中的关键词;用匹配出的关键词在云端依赖关系库中进行查询,查询该环境下提示该错误时所需安装的系统库依赖关系;若能检索成功,则返回系统库名给auto_pip程序;若检索不到,则返回no_result标志给客户端。
更进一步的,所述auto_pip程序收到库名则调起系统库安装程序进行依赖库安装,再尝试安装Python包,若安装过程中出现新的异常,再循环查询并安装依赖库;直到安装齐所有依赖库后,完成Python包安装并提示用户安装成功。
更进一步的,若收到no_result则提示用户无法自动安装,请用户手动处理,在用户处理工程中收集系统图日志并上传到云端;若用户通过手动方法最终完成了依赖库安装,则上传install_finished标志与安装完成后的系统库列表与环境参数;对比安装开始时与完成后的系统库列表与系统环境参数,找出完成该Python包安装所需的依赖,并存储到依赖关系数据库中;提示用户已完成安装。
本发明的有益效果是:本发明简化了Python包安装过程中依赖库缺失情况的处理流程,全自动完成Python包安装,节省安装时间,提供开发效率;自动化智能安装降低了Python包安装的技术门槛,不熟悉操作系统与依赖库相关知识的用户也可完成对系统库有依赖的Python包安装;输入一行指令即开始安装过程,整个过程完全自动化,无需任何手动操作或额外输入。
附图说明
图1为本发明Ubuntu上实现Python依赖系统库自动化安装的方法的流程图。
具体实施方式
下面结合附图和具体实施例对本发明做进一步详细说明。本实施例通过对pipinstall 安装错误日志收集与分析,用户安装时系统上下游环境收集与分析,实现依赖包的自动化安装,简化了Python包的安装流程,降低了技术门槛。方案包括以下几个部分:
信息收集:经用户授权后,将安装过程中的错误日志,系统环境变量,系统参数,内核参数等相关信息收集并上传到云端。
信息分析:分析收集到的信息,从错误日志中解析需要安装的系统库信息,根据系统环境变量,检索需要安装的系统库列表;检索不到时尝试对比用户手动成功安装前后的系统库列表,分析出过程中安装的各种系统库,再尝试检索需要安装的系统库列表;若依然检索不到,尝试将该Python包安装失败的用户环境与另一相同操作系统下成功安装该Python包的用户环境作对比,再尝试检索需要安装的系统库列表。
包依赖关系构建:将分析出的系统库信息,结合操作系统信息,存储到包依赖关系数据库中,作为该操作系统下,安装该Python包的所需的系统库依赖。
依赖关系检索:当有用户尝试安装新的Python包时,分析其上传的系统信息与Python包名,在包依赖关系数据库中检索依赖的系统库。将依赖的系统库信息返回给安装程序。
自动安装依赖:安装程序收到依赖库信息后,调用系统的库安装程序,先安装系统库,再进行Python包安装。如Debian系统的apt-get与Red Hat系统的yum程序。
本实施例的具体实施过程如下:
S1:提供新的Python包管理工具,替代官方的包管理工具,如auto_pip。当用户使用该包管理工具进行Python包安装时,会进入后续流程。
S2:搭建一套云端系统,采用Django Rest Framework框架构建HTTP接口。采用Mongo DB构建Python包与系统库依赖关系数据库。该数据库设计如下:
1)Python包:用户需要安装的Python包名与版本号
2)系统环境:操作系统内核版本号,内核参数,发行版本号,环境参数等
3)依赖库:某特定系统环境下安装Python包所依赖的系统库关系
4)用户日志:用户安装Python包过程中的安装日志与错误信息等
S3:安装auto_pip程序时,提示用户该程序会收集系统信息与日志信息并上传到云端,需要用户同意。用户同意后将授权auto_pip程序收集并上传安装时必要的系统信息与错误日志。客户端与云端的通信用HTTP协议完成。
S4:用户输入指令进行安装:auto_pip install PIL 时,收集一次系统参数与用户输入的指令与start_install标记一起上传,通知云端安装流程开始。
:云端通过包名,包版本,系统内核版本,系统发行版等查询条件从系统库依赖数据库中查询该环境下该包的安装依赖。若查询到依赖关系,则直接返回系统库名给auto_pip程序。auto_pip判断所需依赖是否已安装,若有需要新装的依赖系统库,则调用系统层库安装程序如:yum install , apt-get install 先安装所需的系统库,再进行包安装。若未检索到,则返回no_result标志给客户端,客户端将直接尝试安装Python包。
S5:包安装过程中返回任何系统错误码则将全过程安装日志连同install_error标志一起上传到云端,标示安装过程中遇到异常。
S6:云端一旦收到install_error标志,则接受并分析用户错误日志。利用正则表达式匹配日志中的关键词如:/^fatal error: .*$/ => fatal error: Python.h: Nosuch file or directory。用匹配出的关键词在云端依赖关系库中进行查询,查询该环境下提示该错误时所需安装的系统库依赖关系。若能检索成功,则返回系统库名给auto_pip程序。若检索不到,则返回no_result标志给客户端。
S7:auto_pip收到库名则调起系统库安装程序进行依赖库安装,再尝试安装Python包,若安装过程中出现新的异常,再循环3.2.4步骤查询并安装依赖库。直到安装齐所有依赖库后,完成Python包安装并提示用户安装成功。
S8:若收到no_result则提示用户无法自动安装,请用户手动处理,在用户处理工程中收集系统图日志并上传到云端。若用户通过手动方法最终完成了依赖库安装,上传install_finished标志与安装完成后的系统库列表与环境参数。对比安装开始时与完成后的系统库列表与系统环境参数,找出完成该Python包安装所需的依赖,并存储到依赖关系数据库中。提示用户已完成安装。
安装程序收到依赖库信息后,调用系统的库安装程序,先安装系统库,再进行Python包安装。如Debian系统的apt-get与Red Hat系统的yum程序。
Claims (8)
1.一种Ubuntu上实现Python依赖系统库自动化安装的方法,其特征在于,包括以下步骤:
步骤1:信息收集:经用户授权后,收集安装错误日志、系统环境变量、系统参数和内核参数信息,并由客户端将信息上传到云端;
步骤2:信息分析:分析收集到的信息,从错误日志中解析需要安装的系统库信息,根据系统环境变量,检索需要安装的系统库列表;检索不到时尝试对比用户手动成功安装前后的系统库列表,分析出过程中安装的各种系统库,再尝试检索需要安装的系统库列表;若依然检索不到,尝试将Python包安装失败的用户环境与另一相同操作系统下成功安装该Python包的用户环境作对比,再尝试检索需要安装的系统库列表;
步骤3:包依赖关系构建:将检索出的系统库列表,结合操作系统信息,存储到包依赖关系数据库中,作为该操作系统下,安装该Python包的所需的系统库依赖;
步骤4:依赖关系检索:当有用户尝试安装新的Python包时,分析其上传的系统信息与Python包名,在包依赖关系数据库中检索依赖的系统库;再将依赖的系统库信息返回给安装程序;
步骤5:自动安装依赖:安装程序收到依赖的系统库信息后,调用系统的库安装程序,先安装系统库,再进行Python包安装。
2.根据权利要求1所述的Ubuntu上实现Python依赖系统库自动化安装的方法,其特征在于,所述步骤1之前还包括:在安装auto_pip程序时,提示用户该程序会收集系统信息与日志信息并上传到云端,并等待用户同意。
3.根据权利要求1所述的Ubuntu上实现Python依赖系统库自动化安装的方法,其特征在于,所述客户端与云端的通信用HTTP协议完成。
4.根据权利要求1所述的Ubuntu上实现Python依赖系统库自动化安装的方法,其特征在于,所述步骤4中用户尝试安装新的Python包:根据用户指令进行安装PIL时,收集系统参数、用户输入的指令与start_install标记一起上传,云端收到start_install标志后进入安装流程;云端将包名、包版本、系统内核版本、系统发行版作为查询条件,从系统库依赖数据库中查询该系统环境下该包的安装依赖;若查询到依赖关系,则直接返回系统库名给auto_pip程序;auto_pip判断所需依赖是否已安装,若有需要新装的依赖系统库,则调用系统层库安装程序,先安装所需的系统库,再进行包安装;若未检索到,则返回no_result标志给客户端,客户端将直接尝试安装Python包。
5.根据权利要求4所述的Ubuntu上实现Python依赖系统库自动化安装的方法,其特征在于,所述包安装过程中返回任何系统错误码则将全过程安装日志连同install_error标志一起上传到云端,标示安装过程中遇到异常。
6.根据权利要求5所述的Ubuntu上实现Python依赖系统库自动化安装的方法,其特征在于,所述云端收到install_error标志,进行用户错误日志分析,并利用正则表达式匹配日志中的关键词;用匹配出的关键词在云端依赖关系库中进行查询,查询该环境下提示该错误时所需安装的系统库依赖关系;若能检索成功,则返回系统库名列表给auto_pip程序;若检索不到,则返回no_result标志给客户端。
7.根据权利要求6所述的Ubuntu上实现Python依赖系统库自动化安装的方法,其特征在于,所述auto_pip程序收到库名则调起系统库安装程序进行依赖库安装,再尝试安装Python包,若安装过程中出现新的异常,再循环查询并安装依赖库;直到安装齐所有依赖库后,完成Python包安装并提示用户安装成功。
8.根据权利要求6所述的Ubuntu上实现Python依赖系统库自动化安装的方法,其特征在于,若收到no_result则提示用户无法自动安装,请用户手动处理,在用户处理工程中收集系统图日志并上传到云端;若用户通过手动方法最终完成了依赖库安装,则上传install_finished标志与安装完成后的系统库列表与环境参数;对比安装开始时与完成后的系统库列表与系统环境参数,找出完成该Python包安装所需的依赖,并存储到依赖关系数据库中;提示用户已完成安装。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710942032.7A CN107704256B (zh) | 2017-10-11 | 2017-10-11 | 一种Ubuntu上实现Python依赖系统库自动化安装的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710942032.7A CN107704256B (zh) | 2017-10-11 | 2017-10-11 | 一种Ubuntu上实现Python依赖系统库自动化安装的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107704256A CN107704256A (zh) | 2018-02-16 |
CN107704256B true CN107704256B (zh) | 2020-08-11 |
Family
ID=61183529
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710942032.7A Active CN107704256B (zh) | 2017-10-11 | 2017-10-11 | 一种Ubuntu上实现Python依赖系统库自动化安装的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107704256B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108549559A (zh) * | 2018-05-02 | 2018-09-18 | 山东浪潮通软信息科技有限公司 | 一种调用Python算法的方法和装置 |
CN109739521A (zh) * | 2018-12-29 | 2019-05-10 | 深圳点猫科技有限公司 | 基于Python的第三方库一键安装方法及装置 |
CN109697063A (zh) * | 2018-12-29 | 2019-04-30 | 深圳点猫科技有限公司 | Python库管理列表中的第三方库的安装方法及装置 |
CN111538495B (zh) * | 2020-07-13 | 2020-10-23 | 深圳开源互联网安全技术有限公司 | 识别项目中引用Python开源组件的方法及系统、设备 |
CN114780109B (zh) * | 2022-05-20 | 2024-06-04 | 厦门大学 | Python项目第三方库依赖自动化解析与安装方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102945155A (zh) * | 2012-10-22 | 2013-02-27 | 中标软件有限公司 | 一种Linux操作系统软件包及其依赖关系缺失检测方法 |
CN104765618A (zh) * | 2015-05-06 | 2015-07-08 | 山东中孚信息产业股份有限公司 | 一种Linux系统自解压安装包的制作及解压安装方法 |
US9455876B1 (en) * | 2013-02-01 | 2016-09-27 | Ingram Micro Inc. | Method and standard for integrating applications into a cloud |
-
2017
- 2017-10-11 CN CN201710942032.7A patent/CN107704256B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102945155A (zh) * | 2012-10-22 | 2013-02-27 | 中标软件有限公司 | 一种Linux操作系统软件包及其依赖关系缺失检测方法 |
US9455876B1 (en) * | 2013-02-01 | 2016-09-27 | Ingram Micro Inc. | Method and standard for integrating applications into a cloud |
CN104765618A (zh) * | 2015-05-06 | 2015-07-08 | 山东中孚信息产业股份有限公司 | 一种Linux系统自解压安装包的制作及解压安装方法 |
Non-Patent Citations (1)
Title |
---|
"ubuntu下python模块的库更新";shishenwuxin;《https://blog.csdn.net/shishenwuxin/article/details/60571131》;20170306;正文第1页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107704256A (zh) | 2018-02-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107704256B (zh) | 一种Ubuntu上实现Python依赖系统库自动化安装的方法 | |
US10481884B2 (en) | Systems and methods for dynamically replacing code objects for code pushdown | |
US8671222B2 (en) | Systems and methods for dynamically deploying an application transformation tool over a network | |
US8572566B2 (en) | Systems and methods for analyzing changes in application code from a previous instance of the application code | |
US8898627B2 (en) | Systems and methods for applying rules to transform objects of an application | |
US8375362B1 (en) | Wizard for web service search adapter | |
US11062022B1 (en) | Container packaging device | |
US9703554B2 (en) | Custom code migration suggestion system based on actual change references | |
US8630969B2 (en) | Systems and methods for implementing business rules designed with cloud computing | |
EP2808790A2 (en) | Migration assessment for cloud computing platforms | |
US8863075B2 (en) | Automated support for distributed platform development | |
US10169005B2 (en) | Consolidating and reusing portal information | |
JP2021500658A (ja) | インタラクティブ・ワークフローを実行するコンピュータ実施方法、システム、およびコンピュータ・プログラム製品、ならびにコンピュータ・プログラム | |
US9098583B2 (en) | Semantic analysis driven service creation within a multi-level business process | |
US10372583B2 (en) | Enhanced policy editor with completion support and on demand validation | |
US20130041925A1 (en) | Silent Migration of Business Process Binaries | |
CN112685105A (zh) | 前端组件共享方法、装置、计算机设备及存储介质 | |
CN113568604B (zh) | 风控策略的更新方法、装置及计算机可读存储介质 | |
US20080059949A1 (en) | System and method for implementing a safe framework | |
CN116974947A (zh) | 一种组件检测方法、装置、电子设备及存储介质 | |
Le Zou et al. | On synchronizing with web service evolution | |
CN112860250A (zh) | 前端物料发布方法、装置、设备及存储介质 | |
CN111506339A (zh) | 软件开发工具包sdk的变更信息处理方法及装置 | |
CN114253595A (zh) | 代码仓库管理方法、装置、计算机设备及存储介质 | |
US20190196945A1 (en) | Entity performance and usability analysis framework |
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 | ||
CP02 | Change in the address of a patent holder |
Address after: 9/F, Building C, No. 28, North Tianfu Avenue, China (Sichuan) Pilot Free Trade Zone, Hi tech Zone, Chengdu, 610000, Sichuan Patentee after: CHENGDU KNOWNSEC INFORMATION TECHNOLOGY Co.,Ltd. Address before: 610000, 11th floor, building 2, No. 219, Tianfu Third Street, hi tech Zone, Chengdu, Sichuan Province Patentee before: CHENGDU KNOWNSEC INFORMATION TECHNOLOGY Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |