作为一个Python爱好者,我主要使用Python写一些小工具方便本身和同事工做。如何让我写的小工具简单的发布给别人使用就成了一个让人头痛的问题,由于你们都知道,Python脚本要打包成一个可执行程序是比较麻烦且有不少制约的。我最早尝试了PyInstaller,可是用它打包后获得的程序在第一次运行时,哪怕是一个很是简单的脚本,始终也要等上好几秒钟才会出现程序界面,这让我实在没法接受。我也尝试过cxfreeze,可是他不支持打包为单文件,且打包后的文件体积也是异常的大!最终我决定在没有转到Python3以前主要使用Py2exe打包脚本。工具
使用Py2exe打包脚本为单文件的方法这里就不介绍了。我使用的是Python2.5 + Py2exe0.69,当我兴高采烈的把这个程序拷贝给个人同事使用时,却发现同事的XP电脑没法使用这个程序!查看生成的错误日志显示为:日志
ImportError: MemoryLoadLibrary failed loading wx\_core_.pyd资源
这是由于XP电脑没有安装VC++2005的运行库形成的。若是使用更高版本的Python,则缺乏更高版本的VC++运行库。打包
为此,我每次发布工具,只好将MSVCR71.DLL,MSVCP71.DLL一同拷贝给别人使用,有些时候还须要拷贝一些运行须要的附加资源,这让我感受一个小工具不“小”了。直到我找到了Enigma Virtual Box这个软件虚拟化工具,他支持将多个附加文件和主执行程序打包为一个文件,且在运行后不会在硬盘内生成任何其余文件。Enigma Virtual Box的最新版本为4.3,这个软件更新的很快,建议你们使用最新版本,我以前出现了两次合并后没法运行的问题,经过升级新版本就解决了。软件截图以下:软件
只须要指定一个主程序和附加的文件,再指定打包后新程序的存放位置,就能够进行打包了。默认状况下添加的附加文件的虚拟路径为主程序所在的路径。也支持设定附件到指定的虚拟路径。此外软件还支持虚拟注册表键值,支持将附件真正释放到磁盘。程序
上图可见我将MSVCR71.DLL,MSVCP71.DLL以及一个Shell脚本和Py2exe打包后获得的单文件main.exe封包为一个新文件。这样我发布的小工具就很方便别人使用了。固然,若是你不使用Py2exe,而是使用cxfreeze,也能够用Enigma Virtual Box将生成的许多文件打包为一个单文件。方法