使用Enigma Virtual Box让Py2exe打包出的单文件更完美

 

     做为一个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将生成的许多文件打包为一个单文件。

您可能还喜欢...