CN105260169A - 一种跨平台移植python程序的方法及装置 - Google Patents
一种跨平台移植python程序的方法及装置 Download PDFInfo
- Publication number
- CN105260169A CN105260169A CN201410339009.5A CN201410339009A CN105260169A CN 105260169 A CN105260169 A CN 105260169A CN 201410339009 A CN201410339009 A CN 201410339009A CN 105260169 A CN105260169 A CN 105260169A
- Authority
- CN
- China
- Prior art keywords
- program
- python
- file
- target machine
- compiling
- 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.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/47—Retargetable compilers
Abstract
本发明提供一种跨平台移植python程序的方法及装置。方法包括:利用原始的python编译工具编译本地机的python程序,得到本地机版本的pgen程序;对原始的python编译工具的配置信息进行修改,使其更换与本地机不同平台的目标机的编译器;其中,修改后的python编译工具所生成的pgen程序属于目标机版本,无法在本地机上执行;在本地机上利用修改后的python编译工具编译目标机的python程序,并在该过程中使用本地机版本的pgen程序代替目标机的pgen程序在本地机上执行,从而得到目标机的python程序的编译文件;将所述目标机的python程序的编译文件导入目标机中或通过远程服务向目标机提供所述编译文件。本发明的方案实现了python程序的跨平台移植,有助于不同平台开发软件产品的效率。
Description
技术领域
本发明涉及交叉编译领域,特别是一种跨平台移植python程序的方法及装置。
背景技术
目前,软件开发业界存在多种成熟的开发语言,新的语言吸收了传统语言的特点,可让软件开发更为敏捷。然而,在嵌入式设备中,由于成本限制与处理速度的瓶颈,大多数产品开发语言始终局限在C语言。C语言开发效率低,导致开发周期长,无法适应现今嵌入式产品快速更新换代的需求,因此,应用一种可以让开发周期缩短的语言十分必要。
Python作为近年应用趋势越来越高的语言,具有动态解析,跨平台,公用库多,开发简易等优点,已经成为主流PC侧的标配语言。因此,研究一种将Python移植到嵌入式系统的方法是很有必要的。
此外,工业领域的嵌入式设备的产品更新相比民用产品要慢很多,其存储空间不一定能够装得下Python程序。因此,在实现Python程序移植同时,还需要解决Python程序占用空间大的问题。
发明内容
本发明要解决的技术问题是提供一种跨平台移植python程序的方法及装置,能够实现了python程序的跨平台移植,有助于不同平台开发软件产品的效率。
为解决上述技术问题,本发明的实施例提供一种跨平台移植python程序的方法,包括:
利用python的本地编译工具编译本地机的python程序,得到本地机版本的pgen程序;其中,本地机版本的pgen程序是所述本地编译工具在编译python程序过程中产生且必需执行的程序;
在本地机上利用python的交叉编译工具编译目标机的python程序,并在该过程中使用本地机版本的pgen程序代替目标机版本的pgen程序在本地机上执行,从而得到目标机的python程序的编译文件;其中,所述目标机版本的pgen程序由所述交叉编译工具在编译python程序过程中产生,且无法在本地机上执行;
将所述目标机的python程序的编译文件导入目标机中或通过远程服务向目标机提供所述编译文件。
其中,在本地机上利用修改后的python编译工具编译目标机的python程序的步骤包括:
修改所述本地机版本的pgen程序的时间戳,并将其保存在本地机的目标文件夹中;
在所述目标文件夹中使用修改后的python编译工具编译目标机的python程序;其中,修改后的python编译工具在所述目标文件夹中生成的目标机版本的pgen程序无法覆盖掉时间戳已修改的本地机版本的pgen程序,从而在编译目标机的python程序中,本地机能够执行时间戳已修改的本地机版本的pgen程序,得到目标机的python程序的编译文件。
其中,将所述编译文件导入目标机中的步骤前还包括:
对所述编译文件进行裁剪,只保留其中的bin文件夹和lib文件夹;其中,所述bin文件夹用于保存目标机的python程序的二进制文件,所述lib文件夹用于保存目标机的python程序的库文件。
其中,对所述编译文件进行裁剪的步骤还包括:
删除lib文件夹中的.py类型和/或.pyo类型文件;
和/或删除目标机的python程序的调试功能。
其中,将所述编译文件导入目标机中的步骤前还包括:
使用upx文件压缩器对所述编译文件进行压缩。
其中,所述交叉编译工具能够编译具有读取压缩包能力的python程序;
在使用upx文件压缩器对所述编译文件进行压缩的步骤后还包括:
利用zip压缩软件对lib文件夹中的python库文件夹进行压缩,得到python库文件夹的zip压缩包;之后
对源python库文件夹进行裁剪,只保留其中的os.pyc文件。
此外,本发明还提供一种跨平台移植python程序的装置,包括:
本地编译模块,用于利用python的本地编译工具编译本地机的python程序,得到本地机版本的pgen程序;其中,本地机版本的pgen程序是所述本地编译工具在编译python程序过程中产生且必需执行的程序;
交叉编译模块,用于在本地机上利用python的交叉编译工具编译目标机的python程序,并在该过程中使用本地机版本的pgen程序代替目标机版本的pgen程序在本地机上执行,从而得到目标机的python程序的编译文件;其中,所述目标机版本的pgen程序由所述交叉编译工具在编译python程序过程中产生,且无法在本地机上执行;
导入模块或远程服务模块;其中,所述导入模块用于将所述目标机的python程序的编译文件导入目标机中;所述远程服务模块,用于通过远程服务向目标机提供所述编译文件。
其中,所述交叉编译模块包括:
修改子模块,用于修改所述本地机版本的pgen程序的时间戳,并将其保存在本地机的目标文件夹中;
交叉编译子模块,用于在所述目标文件夹中使用所述交叉编译工具编译目标机的python程序;其中,交叉编译工具在所述目标文件夹中生成的目标机版本的pgen程序无法覆盖掉时间戳已修改的本地机版本的pgen程序,从而在编译目标机的python程序中,本地机能够执行时间戳已修改的本地机版本的pgen程序,得到目标机的python程序的编译文件。
其中,所述装置还包括:
第一裁剪模块,用于在所述导入模块将所述编译文件导入目标机中的步骤前,对所述编译文件进行裁剪,只保留其中的bin文件夹和lib文件夹;其中,所述bin文件夹用于保存目标机的python程序的二进制文件,所述lib文件夹用于保存目标机的python程序的库文件。
其中,所述第一裁剪模块包括:
删除子模块,用于删除bin文件夹和lib文件夹中的.py类型和/或.pyo类型和/或调试信息类型的文件。
其中,所述装置还包括:
第一压缩模块,用于在所述导入模块将所述编译文件导入目标机前,使用upx文件压缩器对所述编译文件进行压缩。
其中,所述交叉编译工具能够编译具有读取zip压缩包能力的python程序;
所述装置还包括:
第二压缩模块,用于在所述第一压缩模块使用upx文件压缩器对所述编译文件进行压缩后,利用zip压缩软件对lib文件夹中的python库文件夹进行压缩,得到python库文件夹的zip压缩包
第二裁剪模块,用于在第二压缩模块得到python库文件夹的压缩包后,对源python库文件夹进行裁剪,只保留其中的os.pyc文件。
本发明的上述技术方案的有益效果如下:
本发明的方案实现了python程序的跨平台移植,有助于不同平台开发软件产品的效率。
附图说明
图1为本发明中跨平台移植python程序的方法的步骤示意图;
图2为本发明中压缩编译文件的执行流程图;
图3为本发明中跨平台移植python程序的装置的结构示意图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
如图1所示,本发明提供一种跨平台移植python程序的方法,包括:
步骤11,利用python的本地编译工具编译本地机的python程序,得到本地机版本的pgen程序;其中,本地机版本的pgen程序是所述本地编译工具在编译python程序过程中产生且必需执行的程序;
步骤12,在本地机上利用python的交叉编译工具编译目标机的python程序,并在该过程中使用本地机版本的pgen程序代替目标机版本的pgen程序在本地机上执行,从而得到目标机的python程序的编译文件;其中,所述目标机版本的pgen程序由所述交叉编译工具在编译python程序过程中产生,且无法在本地机上执行;
步骤13,将所述目标机的python程序的编译文件导入目标机中或通过远程服务向目标机提供所述编译文件。
上述实施例的方法实现了python程序的跨平台移植,可有效提高不同平台的软件开发效率。
其中,交叉编译工具由于配备有目标机的编译器,因此会生成目标机版本的pgen程序。而整个交叉编译的过程需要在本地机执行,当本地机利用交叉编译工具执行到目标机版本的pgen程序时,由于本地机无法执行目标机版本的pgen程序,会中断交叉编译工作,因此需要对交叉编译工具进行配置,使其指定运行本地机版本的pgen程序。显然,这种额外配置工作不够便捷,为此本发明提供了一种更简单快捷地方法,使交叉编译工具能够直接运行本地机版本的pgen程序,即步骤13包括:
步骤131,修改所述本地机版本的pgen程序的时间戳,并将其保存在本地机的目标文件夹中;
步骤132,在所述目标文件夹中使用所述交叉编译工具编译目标机的python程序;其中,交叉编译工具在所述目标文件夹中生成的目标机版本的pgen程序无法覆盖掉时间戳已修改的本地机版本的pgen程序,从而在编译目标机的python程序中,本地机能够执行时间戳已修改的本地机版本的pgen程序,得到目标机的python程序的编译文件。
在上述描述中,只需要修改本地机版本的pgen程序的时间戳,之后将其放入目标文件中在运行交叉编译工具即可使之后生成的目标机版本的pgen程序无法替换掉本地机版本的pgen程序。在交叉编译的过程中,交叉编译工具在目标文件内能够自动执行本地机版本的pgen程序,这种替换方式十分简单,不需要过再过多修改交叉编译工具的配置信息。
此外,经研究发现,在目标机执行python程序时,只应用到了编译文件的bin文件夹和lib文件夹。其中,bin文件夹用于保存目标机的python程序的二进制文件,lib文件夹用于保存目标机的python程序的库文件。因此,作为优选方案,本发明的方法还包括:
步骤15,对所述编译文件进行裁剪,只保留其中的bin文件夹和lib文件夹。
此外,在上述实施例的基础之上,还可进一步对所述编译文件进行裁剪,即步骤15中,删除lib文件夹中的.py类型和/或.pyo类型文件;和/或删除目标机的python程序的调试功能。
在编译文件中,.py是源程序文件,pyc是.py编译后形成的文件(即对源文件进行编译,就会生成.pyc文件),而.pyo为优化编译后的文件。其中,目标机实际应用到的是经编译的.pyc以及.pyo文件,因此可直接删除.py文件。而.pyo文件的优化效果在运行时并不明显,为进一步节约编译文件的占用空间也可进行删除。此外,目标机的python程序具有调试功能,用于进行程序优化,但成熟稳定的python程序不需要用户去进行优化,因此python程序的调试功能相对多余,也可以被删除掉。需要说明的是,删除python程序的调试功能并不是删除掉所述编译文件中的某个文件,而是一种带有功能损失的压缩过程。
优选地,在对编译文件进行裁剪后,本发明的方法还可以包括:
步骤16,使用upx文件压缩器对所述编译文件进行压缩,以进一步节约编译文件占用空间。
之后还可执行步骤17,利用zip压缩软件对lib文件夹中的python库文件夹再次进行压缩,得到python库文件夹的zip压缩包;以及
步骤18,对源lib文件夹进行裁剪,只保留其中的os.pyc文件。
在上述描述中,upx压缩的文件后不会产生压缩包,因此可结合目前常见的zip压缩包技术一起使用。在对python库文件夹进行第二次压缩后,会在源python库文件夹的基础上生成一个zip压缩包,理论上讲,源python库文件夹可以直接删除,但在实际验证中发现,该文件夹中的os.pyc文件必须保留,才能使python程序在执行时正常加载python库文件夹的压缩包。因此上述步骤18保留了os.pyc文件。
下面结合一个实际的应用场景对本发明的方法进行详细介绍。
Python是PC端所使用的动态解析语言,因此在本应用场景中,将PC作为本地机。而目前大多数嵌入式设备都基于ARM处理器平台,不能实现Python程序,因此本应用场景用于在ARM处理器上实现Python程序。
首先获取python的本地编译工具,即本领域熟知的应用于PC侧的python源码包,之后基本地编译工具按照现有的python程序编译过程工作,得到PC版本的pgen程序。
由于python的交叉编译不仅仅涉及嵌入式侧的编译,还涉及PC侧部分必需程序的生成,因此,通过目标文件夹的方式进行两方的隔离,这里,进入源码包,新建一个名称为arm_build的目标文件夹,用于存储交叉编译的python程序(即嵌入式设备的python程序)。
之后将PC版本的pgen程序放入arm_build文件夹中,并在arm_build目录下,执行如下命令:
touch–t12312359Parser/pgen
上述命令的意思是为将PC版本的pgen程序的时间戳改为今年的12月31日的23时59分,只要不在一年的最后一分钟执行,均为有效操作。该操作可以保证arm_build目录下的make操作不会替换刚才复制进来的可以在PC侧运行的pgen程序。
下面的步骤重点陈述如何在一个源码包中,区分两种运行环境的编译生成操作。
首先,对本地编译工具的配置信息进行修改,即在arm_build文件夹内操作如下:
echoac_cv_file__dev_ptmx=yes>config.site
echoac_cv_file__dev_ptc=yes>>config.site
exportCONFIG_SITE=config.site
并执行
../configure
--host=arm-none-linux-gnueabi--build=i686-linux-gnu--target=arm-none-linux-gnueabi--disable-ipv6--prefix=$arm_install--enable-shared--silent
目前python程序的嵌入式应用尚不完全支持ipV6的通信,因此,需要通过--disable-ipv6命令进行屏蔽。--prefix=$arm_install命令用于设置交叉编译后的待安装目录,这里取/opt/arm_python。--build命令用于设置PC侧的系统信息。--host命令用于设置ARM处理器的交叉编译器,用户可以根据实际情况进行详细设置。--enable-shared命令可选,代表交叉编译后的python采用共享库模式(本应用场景中,不添加该选项)。通过上述配置修改完成后,本地编译工具更换为ARM处理器的编译器,成为本文所述的交叉编译工具,能够编译出ARM处理器的python程序。
在configure操作完成后,会在arm_build里生成makefile文件夹,在其中Modules的Setup中找到如下这句命令:
zlibzlibmodule.c-I$(prefix)/include-L$(exec_prefix)/lib–lz
取消该命令的注释,即可使生成的python程序具备读取zip压缩包的能力。
之后,在arm_build目录下,执行make&&makeinstall–i
注意-i参数是必要的,意思为即使错误,仍然继续安装。这是由于ARM处理器版本的python程序在编译过程中,存在时序问题,先安装的某模块依赖于后安装的某模块,加入该参数,可以解决这个问题,否则,无法正常安装。
至此,/opt/arm_python中已经具有可以运行于ARM处理器的python程序与库文件。
由于PC侧交叉编译后的python程序占用空间大,大多数ARM处理器的嵌入式设备的存储空间较为紧张,不能直接复制到嵌入式设备中,因此需要进行裁剪,下面对裁剪过程进行具体介绍。
为方便陈述,假设这里python选择2.7版本。
步骤S1,经过python文件结构的分析,发现得到的编译文件中只有bin和lib文件夹是运行时必须,因此,删除其他文件夹。
步骤S2,Bin文件夹中,只有python2.7为实际执行文件。
步骤S3,Lib文件夹中,只有libpython2.7.so.1.0(设置了动态库模式具有该文件)和python2.7文件夹为实际运行所需。
步骤S4,裁剪python2.7库文件夹,实际仅保留.pyc文件即可。
步骤S5,进入python安装路径后执行下述命令删除调试功能:
arm-none-linux-gnueabi-stripbin/python2.7
arm-none-linux-gnueabi-striplib/libpython2.7.so.1.0(设置了动态库模式则执行该命令)
arm-none-linux-gnueabi-striplib/python2.7/lib-dynload/*
经上述步骤裁剪后保留了嵌入式设备的python程序的最重要的文件。此外,还可一进一步降低编译文件的空间占用,即在步骤S5后执行以下步骤:
步骤S6,应用upx技术对裁剪后的编译文件进行压缩。在本步骤中,如果PC侧未安装有upx,则执行apt-getinstallupx命令进行安装。此外,由于动态库默认为只读权限,这里,新增写权限,方可压缩,其权限修改命令如下所示:
chmod+wlib/libpython2.7.so.1.0
upxlib/libpython2.7.so.1.0
chmod+wlib/python2.7/lib-dynload/*
upxlib/python2.7/lib-dynload/*
upxbin/python2.7
步骤S7,进入python2.7库文件夹后,执行zip–r../python27.zip命令,即使用zip压缩软件对lib/python2.7的库文件夹进行压缩,得到名为python27.zip的压缩包。
步骤S8,删除python2.7库文件中除os.pyc外的所有文件。
此时,ARM处理器侧的python程序的编译文件包括如下基本文件:
bin/python2.7、lib/python2.7/os.pyc、lib/python27.zip、lib/libpython2.7.so.1.0(静态库模式没有该文件)。整个编译文件占用空间小于6M,可广泛应用于存储空间紧张的嵌入式系统中。
对于存储空间更为紧张的嵌入式系统,本发明进一步提供方案:
Python库只保留python程序运行所需要的最基本的库文件。
这里的关键是如何找出python的最基本库文件清单,方法如下:
执行python–v2>verbose.txt命令;该命令用于将AMR处理器侧的Python程序启动过程中所引用的库文件记录在verbose文件中,根据verbose文件中的信息对python27.zip的库文件进行删选,只保留最基本的库文件。删选后的python27.zip仅占用100多K空间。
应用以上技术,可将python应用在空间紧张的嵌入式产品中。
对于存储空间极其紧张甚至接近于0的嵌入式设备,如果其具有IP网络功能,本发明进一步提供基于NFS技术的方法进行实现。其详细说明如下。
PC开启nfs服务功能,NFS分享/opt/arm_python文件夹。
嵌入式侧远程加载arm_python文件夹,包括应用程序、库文件与待编辑文件。具体操作如下:
远端设备:
确保安装了nfs-kernel-server服务。
在/etc/exports中添加如下:
/opt/arm_python*(rw,no_root_squash)
执行exportfs–arv使其生效。
在/etc/default/nfs-kernel-server文件中,添加RPCMOUNTDOPTS="--manage-gids--port1002"命令,其中1002示例性表示端口的IP(端口可根据实际情况选取)。
执行servicenfs-kernel-serverrestart使其生效。
在防火墙中添加1002端口即可。
嵌入式设备侧:
在/mnt文件夹内新建python文件夹,执行
Mount–onolockip:/opt/arm_python/mnt/python
Ip设置为远程设备地址。
在/etc/profile中,加入
ExportPATH=$PATH:/mnt/python/bin
ExportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/python/lib。
通过以上步骤,嵌入式设备可0空间占用下实现python程序。
当然,上述压缩编译文件的占用空间的方法并不以一定要全部使用,可根据实际的嵌入式设备的存储空间有策略性地选择执行。示例性地,可如图2所示的流程压缩编译文件。
综上所述,本发明将PC端常用的动态解析语言Python移植到基于ARM处理器的平台系统中,还应用裁剪压缩技术,不断地减少ARM处理器的python程序的占用空间,特别适用于成本低、存储空间小的嵌入式设备。
此外,如图3所示,本发明的另一实施例还提供一种跨平台移植python程序的装置,包括:
本地编译模块,用于利用原始的python编译工具编译本地机的python程序,得到本地机版本的pgen程序;其中,pgen程序是python编译工具在编译python程序过程中产生且必需执行的程序;
配置模块,用于对原始的python编译工具的配置信息进行修改,使其更换与本地机不同平台的目标机的编译器;其中,修改后的python编译工具所生成的pgen程序属于目标机版本,无法在本地机上执行;
交叉编译模块,用于在本地机上利用修改后的python编译工具编译目标机的python程序,并在该过程中使用本地机版本的pgen程序代替目标机的pgen程序在本地机上执行,从而得到目标机的python程序的编译文件;
导入模块或远程服务模块;其中,所述导入模块用于将所述目标机的python程序的编译文件导入目标机中;所述远程服务模块,用于通过远程服务向目标机提供所述编译文件。
上述实施例的装置实现了python程序的跨平台移植,可有效提高不同平台的软件开发效率。
其中,所述交叉编译模块包括:
修改子模块,用于修改所述本地机版本的pgen程序的时间戳,并将其保存在本地机的目标文件夹中;
交叉编译子模块,用于在所述目标文件夹中使用修改后的python编译工具编译目标机的python程序;其中,修改后的python编译工具在所述目标文件夹中生成的目标机版本的pgen程序无法覆盖掉时间戳已修改的本地机版本的pgen程序,从而在编译目标机的python程序中,本地机能够执行时间戳已修改的本地机版本的pgen程序,得到目标机的python程序的编译文件。
此外,在上述实施例的基础之上,所述装置还包括:
第一裁剪模块,用于在所述导入模块将所述编译文件导入目标机中的步骤前,对所述编译文件进行裁剪,只保留其中的bin文件夹和lib文件夹;其中,所述bin文件夹用于保存目标机的python程序的二进制文件,所述lib文件夹用于保存目标机的python程序的库文件。
具体地,所述第一裁剪模块包括:
删除子模块,用于删除lib文件夹中的.py类型和/或.pyo类型,和/或删除目标机的python程序的调试功能。
此外,在上述实施例的基础之上,所述装置还包括:
第一压缩模块,用于在所述导入模块将所述编译文件导入目标机前,使用upx文件压缩器对所述编译文件进行压缩。
其中,修改后的python编译工具能够编译具有读取压缩包能力的python程序;
所述装置还包括:
第二压缩模块,用于在所述第一压缩模块使用upx文件压缩器对所述编译文件进行压缩后,利用zip压缩软件对lib库文件夹进行压缩,得到lib文件夹的zip压缩包;
第二裁剪模块,用于在第二压缩模块得到lib文件夹的压缩包后,对源lib文件夹进行裁剪,只保留其中的os.pyc文件。
显然,本实施例的装置与本发明的跨平台移植python程序的方法相对应,该方法所能达到的技术效果,本实施例的装置同样也能够达到。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (12)
1.一种跨平台移植python程序的方法,其特征在于,包括:
利用python的本地编译工具编译本地机的python程序,得到本地机版本的pgen程序;其中,本地机版本的pgen程序是所述本地编译工具在编译python程序过程中产生且必需执行的程序;
在本地机上利用python的交叉编译工具编译目标机的python程序,并在该过程中使用本地机版本的pgen程序代替目标机版本的pgen程序在本地机上执行,从而得到目标机的python程序的编译文件;其中,所述目标机版本的pgen程序由所述交叉编译工具在编译python程序过程中产生,且无法在本地机上执行;
将所述目标机的python程序的编译文件导入目标机中或通过远程服务向目标机提供所述编译文件。
2.根据权利要求1所述的方法,其特征在于,在本地机上利用修改后的python编译工具编译目标机的python程序的步骤包括:
修改所述本地机版本的pgen程序的时间戳,并将其保存在本地机的目标文件夹中;
在所述目标文件夹中使用所述交叉编译工具编译目标机的python程序;其中,交叉编译工具在所述目标文件夹中生成的目标机版本的pgen程序无法覆盖掉时间戳已修改的本地机版本的pgen程序,从而在编译目标机的python程序中,本地机能够执行时间戳已修改的本地机版本的pgen程序,得到目标机的python程序的编译文件。
3.根据权利要求1所述的方法,其特征在于,将所述编译文件导入目标机中的步骤前还包括:
对所述编译文件进行裁剪,只保留其中的bin文件夹和lib文件夹;其中,所述bin文件夹用于保存目标机的python程序的二进制文件,所述lib文件夹用于保存目标机的python程序的库文件。
4.根据权利要求3所述的方法,其特征在于,对所述编译文件进行裁剪的步骤还包括:
删除lib文件夹中的.py类型和/或.pyo类型文件;
和/或删除目标机的python程序的调试功能。
5.根据权利要求1所述的方法,其特征在于,将所述编译文件导入目标机中的步骤前还包括:
使用upx文件压缩器对所述编译文件进行压缩。
6.根据权利要求5所述的方法,其特征在于,所述交叉编译工具能够编译具有读取zip压缩包能力的python程序;
在使用upx文件压缩器对所述编译文件进行压缩的步骤后还包括:
利用zip压缩软件对lib文件夹中的python库文件夹进行压缩,得到python库文件夹的zip压缩包;之后
对源python库文件夹进行裁剪,只保留其中的os.pyc文件。
7.一种跨平台移植python程序的装置,其特征在于,包括:
本地编译模块,用于利用python的本地编译工具编译本地机的python程序,得到本地机版本的pgen程序;其中,本地机版本的pgen程序是所述本地编译工具在编译python程序过程中产生且必需执行的程序;
交叉编译模块,用于在本地机上利用python的交叉编译工具编译目标机的python程序,并在该过程中使用本地机版本的pgen程序代替目标机版本的pgen程序在本地机上执行,从而得到目标机的python程序的编译文件;其中,所述目标机版本的pgen程序由所述交叉编译工具在编译python程序过程中产生,且无法在本地机上执行;
导入模块或远程服务模块;其中,所述导入模块用于将所述目标机的python程序的编译文件导入目标机中;所述远程服务模块,用于通过远程服务向目标机提供所述编译文件。
8.根据权利要求7所述的装置,其特征在于,所述交叉编译模块包括:
修改子模块,用于修改所述本地机版本的pgen程序的时间戳,并将其保存在本地机的目标文件夹中;
交叉编译子模块,用于在所述目标文件夹中使用所述交叉编译工具编译目标机的python程序;其中,交叉编译工具在所述目标文件夹中生成的目标机版本的pgen程序无法覆盖掉时间戳已修改的本地机版本的pgen程序,从而在编译目标机的python程序中,本地机能够执行时间戳已修改的本地机版本的pgen程序,得到目标机的python程序的编译文件。
9.根据权利要求7所述的装置,其特征在于,还包括:
第一裁剪模块,用于在所述导入模块将所述编译文件导入目标机中的步骤前,对所述编译文件进行裁剪,只保留其中的bin文件夹和lib文件夹;其中,所述bin文件夹用于保存目标机的python程序的二进制文件,所述lib文件夹用于保存目标机的python程序的库文件。
10.根据权利要求9所述的装置,其特征在于,所述第一裁剪模块包括:
删除子模块,用于删除lib文件夹中的.py类型和/或.pyo类型,和/或删除目标机的python程序的调试功能。
11.根据权利要求7所述的装置,其特征在于,还包括:
第一压缩模块,用于在所述导入模块将所述编译文件导入目标机前,使用upx文件压缩器对所述编译文件进行压缩。
12.根据权利要求11所述的装置,其特征在于,所述交叉编译工具能够编译具有读取zip压缩包能力的python程序;
所述装置还包括:
第二压缩模块,用于在所述第一压缩模块使用upx文件压缩器对所述编译文件进行压缩后,利用zip压缩软件对lib文件夹中的python库文件夹进行压缩,得到python库文件夹的zip压缩包
第二裁剪模块,用于在第二压缩模块得到python库文件夹的压缩包后,对源python库文件夹进行裁剪,只保留其中的os.pyc文件。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410339009.5A CN105260169A (zh) | 2014-07-16 | 2014-07-16 | 一种跨平台移植python程序的方法及装置 |
PCT/CN2014/089512 WO2015117419A1 (zh) | 2014-07-16 | 2014-10-24 | 一种跨平台移植python程序的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410339009.5A CN105260169A (zh) | 2014-07-16 | 2014-07-16 | 一种跨平台移植python程序的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105260169A true CN105260169A (zh) | 2016-01-20 |
Family
ID=53777236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410339009.5A Withdrawn CN105260169A (zh) | 2014-07-16 | 2014-07-16 | 一种跨平台移植python程序的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105260169A (zh) |
WO (1) | WO2015117419A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106909434A (zh) * | 2017-02-28 | 2017-06-30 | 杭州迪普科技股份有限公司 | 可执行程序中未定义函数的检测方法及装置 |
CN108549559A (zh) * | 2018-05-02 | 2018-09-18 | 山东浪潮通软信息科技有限公司 | 一种调用Python算法的方法和装置 |
CN110503644A (zh) * | 2019-08-27 | 2019-11-26 | 广东工业大学 | 基于移动平台的缺陷检测实现方法、缺陷检测方法及相关设备 |
CN115981646A (zh) * | 2022-12-29 | 2023-04-18 | 深圳市铨顺宏科技有限公司 | 一种交互界面快速开发方法、装置、设备及存储介质 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112130859A (zh) * | 2019-06-25 | 2020-12-25 | 深信服科技股份有限公司 | 一种应用运行方法、装置、设备及存储介质 |
CN111722875A (zh) * | 2020-05-19 | 2020-09-29 | 上海中科网威信息技术有限公司 | 一种申威平台快速移植编译开源程序的方法 |
CN112241268A (zh) * | 2020-09-22 | 2021-01-19 | 合肥寰芯微电子科技有限公司 | 一种keil工程的编译方法、系统及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1885264A (zh) * | 2005-06-21 | 2006-12-27 | 国际商业机器公司 | 用于嵌入式系统的软件包构建方法和系统 |
US20090249277A1 (en) * | 2008-03-31 | 2009-10-01 | Sun Microsystems, Inc. | Method for creating unified binary files |
CN103488485A (zh) * | 2013-09-25 | 2014-01-01 | 浪潮电子信息产业股份有限公司 | 一种优化应用软件在服务器上运行性能的并行移植方法 |
-
2014
- 2014-07-16 CN CN201410339009.5A patent/CN105260169A/zh not_active Withdrawn
- 2014-10-24 WO PCT/CN2014/089512 patent/WO2015117419A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1885264A (zh) * | 2005-06-21 | 2006-12-27 | 国际商业机器公司 | 用于嵌入式系统的软件包构建方法和系统 |
US20090249277A1 (en) * | 2008-03-31 | 2009-10-01 | Sun Microsystems, Inc. | Method for creating unified binary files |
CN103488485A (zh) * | 2013-09-25 | 2014-01-01 | 浪潮电子信息产业股份有限公司 | 一种优化应用软件在服务器上运行性能的并行移植方法 |
Non-Patent Citations (1)
Title |
---|
宋立志: "基于IEC61131-3标准的数控系统开发环境原型研究", 《中国优秀硕士学位论文全文数据库》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106909434A (zh) * | 2017-02-28 | 2017-06-30 | 杭州迪普科技股份有限公司 | 可执行程序中未定义函数的检测方法及装置 |
CN106909434B (zh) * | 2017-02-28 | 2020-04-03 | 杭州迪普科技股份有限公司 | 可执行程序中未定义函数的检测方法及装置 |
CN108549559A (zh) * | 2018-05-02 | 2018-09-18 | 山东浪潮通软信息科技有限公司 | 一种调用Python算法的方法和装置 |
CN110503644A (zh) * | 2019-08-27 | 2019-11-26 | 广东工业大学 | 基于移动平台的缺陷检测实现方法、缺陷检测方法及相关设备 |
CN115981646A (zh) * | 2022-12-29 | 2023-04-18 | 深圳市铨顺宏科技有限公司 | 一种交互界面快速开发方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2015117419A1 (zh) | 2015-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105260169A (zh) | 一种跨平台移植python程序的方法及装置 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CN103049251B (zh) | 一种数据库持久层装置及数据库操作方法 | |
US8244780B1 (en) | Parameter oriented automated database command | |
CN111061638B (zh) | 一种iOS系统调试的方法、装置及服务器 | |
CN107632827B (zh) | 应用的安装包的生成方法及装置 | |
CN105718251A (zh) | 多语言sdk自动化实现方法及系统 | |
CN109408493A (zh) | 一种数据源的迁移方法及系统 | |
CN105260191A (zh) | 一种基于配置的测试程序与操作员界面数据交互方法 | |
CN103440136A (zh) | 分布式编译的方法及系统 | |
CN108563432A (zh) | 一种通过路由配置的Android应用程序组件化快速开发方法 | |
CN107291447B (zh) | 一种自动生成并发布sdk代码的方法 | |
CN109344619A (zh) | 应用程序的热修复方法和装置 | |
CN111209001A (zh) | 批量生成安卓各渠道apk的方法、系统、设备和介质 | |
Cai et al. | A pattern-based code transformation approach for cloud application migration | |
KR20220103490A (ko) | 전력 시스템을 위한 마이크로 서비스 개발 플랫폼 및 마이크로 서비스 배포 실행 방법 | |
CN102135889A (zh) | 嵌入式系统通讯方式的快速构建方法 | |
CN115756451A (zh) | 一种多项目代码文件重用的方法、装置、设备、存储介质 | |
CN105354073A (zh) | 一种基于安卓系统的单机应用网络化方法和系统 | |
US9411618B2 (en) | Metadata-based class loading using a content repository | |
CN110750310B (zh) | 基于ios系统组件化开发的二进制和源码切换方法 | |
CN103699627A (zh) | 一种基于Hadoop集群的超大文件并行数据块定位方法 | |
CN106326411A (zh) | 一种配置变更的方法及装置 | |
CN115857914A (zh) | 一种自动生成代码的方法、设备和存储介质 | |
CN111428209B (zh) | 一种应用程序的混淆方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20160120 |
|
WW01 | Invention patent application withdrawn after publication |