Pyinstaller使用记录
2016年06月11日 Python

Pyinstaller是用于对Python脚本打包成可执行文件的工具。

起因

接上次的Android加载动态库的问题,因为很多应用或者游戏,在某些商店上架的时候会进行二次打包,会将自己的SDK的资源(动态库,各种资源之类的)打包到应用或者游戏的apk包里,这样儿就出现了之前说过的问题,如果一个应用或者游戏只提供了一个armeabi平台的动态库(其他平台兼容armeabi),这样问题就在于如果某些渠道的SDK封装了动态库并且提供不同平台的动态库(性能或者其他考虑,类似x86,armeabi-v7a),就会出现二次打包后,某些非armeabi的平台,打开应用或者游戏的瞬间,应用或者游戏就崩溃了,因为lib下有对应的文件夹,而应用或者游戏本身并没提供对应的动态库,动态库只存在于armeabi文件夹中。所以为了解决这个问题,就需要每次打包前都检查各个sdk提供的二次打包的zip包,将其中的除armeabi的文件夹都删除,再打包。因为可能windows和mac都需要,所以选择用Python来写这样儿一个脚本,删除zip包内指定的文件夹的功能,废话一堆,主要目的是这个,每次打包打开命令行再输入python命令其实也很繁琐,最好就是双击一下可执行文件,当前目录下的sdk的zip包就都经过删除非armeabi的处理了(脚本逻辑非常简单,解包,搜索root文件夹,把非armeabi的文件夹都删除),之前用过pyinstaller打包过python脚本为可执行文件,这里做一下记录。

使用方法

PyInstaller很强大,可以为多个平台(windows,mac,linux)生成可执行文件。

  • mac下的pyinstaller使用

    mac下的pyinstaller使用很简单,直接去pyinstaller官网主页右下角下载最新版本zip包,直接解压在某个目录里就可以,然后终端进入pyinstaller-xx的目录里,直接使用

    python pyinstaller.py YOUR_PYTHON_FILE

    就会生成mac下可执行文件了,这样生成的是一个文件夹(里面包含所了所有需要的动态库),如果想把资源,库都打包到一整个文件里,使用-F选项,即

    python pyinstaller.py -F YOUR_PYTHON_FILE

    然后会在pyinstaller-xx文件夹下生一个与YOUR_PYTHON_FILE相同的文件夹,里面的dist文件夹里就有你想要的名为YOUR_PYTHON_FILE的可执行文件了。这样方便发送给别人使用,如果发送给别人使用无应,应该是打包好的这个可执行文件在另一台电脑上没有执行权限,直接执行

    chmod 755 YOUR_EXECUTE_FILE

    通常可以直接解决问题。

  • windows下pyinstaller的使用

    1. 安装python2.7,python加入环境变量(为了随处都可以使用控制台使用python命令)

    2. 然后pyinstaller需要一个单独的pywin32包,这里可以下载到,注意:要下载对应的与python2.7版本相同的。下载完成直接一路安装next就可以了。如果出现中间一步无法继续,应该是下载的pywin32版本与安装的python环境版本不同导致的

    3. 下载pyinstaller2.0包,解压到指定目录不需要python setup.py install这步,也不需要configure这步

    4. 下载upx可执行文件,下载最新的对应windows下的zip包即可,把zip包里的upx.exe提取,放到上一步解压的pyinstaller文件夹的根目录中。

    5. 在pyinstaller目录中直接执行

      python pyinstaller.py YOUR_PYTHON_FILE

      或者

      python pyinstaller.py -F YOUR_PYTHON_FILE

      表现与mac上致,如果不加-F,生成与YOUR_PYTHON_FIlE相同的文件夹,里面包含了动态库(dll,资源之类),加-F选项直接生成一个打包好的exe。

记录end