有些软件是使用python,ruby等语言写的,如果没有特定的环境的话就无法运行,为了便于部署,就出现了一些工具,将脚本源码编译成可执行文件,编译后的文件就可以脱离特定的环境运行了,在这里首先介绍三个打包程序,知道它的过程后,更有利于理解打包后的文件结构。
一、python封装工具:Pyinstaller
直接使用Python开发的软件时有许多不方便的地方,如需要安装特定的Python环境,需要安装依赖库。为了便于部署,需要将Python源代码编译成可执行文件,编译后的可执行文件就能脱离python环境运行了。可以通过Pyinstaller来对文件进行封装。
最简单的使用方式是运行“pyinstaller hello.py”来生成可执行文件,其中hello.py是需要编译成可执行文件的源代码,通过这种方式生成的可执行文件默认位于当前文件夹的dist目录下,dist目录位于pyinstaller所在的myscript目录中。
通过这种方式同时还会生成build文件夹,这个文件夹存放的是编译过程中的生成的临时文件,可以删除。在dist文件夹下,除了有exe文件外,还有若干个其他文件,这些文件都是运行时必须的。
这给我们发布软件带来了不便,如果希望编译出的exe文件不依赖其他文件,可以添加-F选项:
下面对其常用的参数进行说明:
参数 | 说明 |
-w
–windowed –noconsole |
使用windows子系统执行,当程序启动的时候,不会打开命令行。 |
-d
–debug |
产生debug版本的可执行文件 |
-c
–console –nowindowed |
使用控制台子系统执行(默认)(只对Windows有效) |
–distpach DIR | 设置产生的应用程序的存放位置,默认是./dist |
–workpath WORKPATH | 设置临时文件的存放目录,默认为./build |
–specpath DIR | 设置spec文件的存放目录,默认在当前文件夹下 |
-n NAME
–name NAME |
设置生成的应用程序和spec文件的名称 |
-p DIR
–paths DIR |
设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径 |
–key KEY | 使用指定的key加密python代码 |
-i FILE.ico or FILE.exe or FILE.icns
–icon FILE.ICO or FILE.exe or FILE.icns |
指定生成的应用程序的图标 |
–uac-admin | 指定生成的应用程序需要管理员权限运行 |
二、Ruby封装工具:exerb
目前将Ruby代码打包成exe可执行文件主要有3种方式:
1、rubyscript2exe,年久失修,打包出来的文件太大,不对源文件进行加密,运行时将源码释放到一个临时目录后执行;
2、exerb,已经支持Ruby1.8.7和1.9,可以设置程序的版本信息,图标等,打包后的可执行文件可以用UPX压缩,功能很强大,执行时不释放源文件出来,对程序加密较好,但是对waitr这种需要调用DLL的gem支持不是很好,无法进行打包处理;
3、ocra,原理和 rubyscript2exe差不多,可定制性不强,但是对 Ruby1.8.7和1.9以及 waitr都提供很好的支持,而且打包的时候会对文件进行压缩,打包后程序的大小可以接受,程序图标和版本信息暂时不能定制,但是默认图标比 rubyscript2exe要好看,如果对源码保护要求不是很强,用exerb又无法成功打包的时候,可以采用这个。
这里以比较强大的exerb为例进行说明。先执行“mkexy hello.rb”,会自动生成一个hello.exy的配置文件,打开此配置文件,加入下面的代码:
resource:
icon:
- width : 16
height: 16
color : 8
file : 19lou.ico
- width : 32
height: 32
color : 8
file : 19lou.ico
version:
file_version_number : 1.2.3.4
product_version_number: 5.6.7.8
comments : Comments Field
company_name : Company Name Field
legal_copyright : Legal Copyright Field
legal_trademarks : Legal Trademarks Field
file_version : File Version Field
product_version : Product Version Field
product_name : Product Name Field
file_description : File Description Field
internal_name : Internal Name Field
original_filename : Original Filename Field
private_build : Private Build Field
special_build : Special Build Field
这些代码用来配置生成的exe文件的一些信息,如图标、版本等;
然后执行“exerb main.exy”,生成最终的可执行文件,该可执行文件比较大,可以使用UPX进行压缩,压缩率可以达到70%以上。
三、ASP源码封装工具:NetBox
NetBox是一个使用脚本语言进行应用软件开发与发布的开发环境和运行平台,使用 NetBox,可以完全使用脚本语言(比如 VBScript,Javascript) 创建出稳定高效的应用软件,并且可以平滑移植到从 Windows 98 到 Windows .NET Server 的全部操作系统上。适用范围对于 WEB 应用,可以迅速将已有的 iis+asp 的应用平滑移植到NetBox应用中,除极少数高级编程外,代码不需要任何修改,同时NetBox还提供大量扩展部件,使得 WEB 应用更加方便。由于NetBox可以将全部代码最终发布成为应用程序,保护了开发人员的利益和代码的完整性。同时,NetBox还可以方便地编写更多的桌面应用、系统服务器应用、定制网络应用等等。
简单的形容就是把ASP文件打包成一个EXE文件,并且不需要在调试的机器上安装IIS即可正常调试。下面通过一个简单的实例来认识NetBox的使用。
第一步,肯定是要下载安装NetBox。此步略过
第二步,在任意位置创建一个空的目录,再在其中创建一个名为“main.box”的文件,将下面的代码内容复制到文件中:
Dim httpd
Shell.Service.RunService "NBWeb", "NetBox Web Server", "NetBox Http Server
Sample"
'---------------------- Service Event ---------------------
Sub OnServiceStart()
Set httpd = CreateObject("NetBox.HttpServer")
If httpd.Create("", 80) = 0 Then
Set host = httpd.AddHost("", "wwwroot")
host.EnableScript = true
host.AddDefault "index.asp"
host.AddDefault "default.asp"
host.AddDefault "index.htm"
host.AddDefault "default.htm"
httpd.Start
else
Shell.Quit 0
end if
End Sub
Sub OnServiceStop()
httpd.Close
End Sub
Sub OnServicePause()
httpd.Stop
End Sub
Sub OnServiceResume()
httpd.Start
End Sub
注意:
Set host = httpd.AddHost(“”, “wwwroot”) 中的wwwroot就是放网站程序的目录。也就是一定要与第3步将建立的目录名称相同!
第三步,复制ASP应用:上文我们提到网站主目录为wwwroot目录,则我们需要在第2步我们建立的目录下建立一个wwwroot目录,为了方便测试,我们编写一个简单的asp文件,编辑内容如下:只是在网页中输出HelloWorld。
<%
Reponse.write "HelloWorld"
%>
第四步,调试运行asp程序:双击我们第2步创建的box文件,这时候就出现了一个红色的.b的托盘图标。
然后,再在浏览器中输入127.0.01,如果页面中出现了“HelloWorld”,就说明我们以上的配置非常成功。
第五步,编译:我们可以将ASP程序打包成.exe程序,就需要执行exe (netbox deployment wizard就是部署向导),然后点击“Select Folder”按钮,找到第二步建立的目录再点击“Brower”按钮,输入要生成的执行文件的目录和名称,选择好之后直接点击“Build”开始编译。
第六步:找到生成的exe文件,双击运行,然后,在浏览器中输入127.0.0.1,同样可以看到网页中的HelloWorld字样。