美文网首页程序员
使用PyInstaller将flask打包为一个exe

使用PyInstaller将flask打包为一个exe

作者: 杞梓林 | 来源:发表于2019-12-13 14:59 被阅读0次

    PyInstaller

    PyInstaller是一个将python项目打包为exe的第三方包。
    PyInstaller官网
    详细文档
    直接在命令行使用pip进行安装:

    pip install pyinstaller
    

    打包方式

    可以直接运行命令行打包,也可以通过编写脚本进行打包, 还可以执行*.spec配置进行打包。

    1 命令行打包格式

    官方文档提供的格式是这个:

    pyinstaller [options] script [script …] | specfile
    

    举个简单的例子就是
    -直接命令行打包

    pyinstaller options… ~/myproject/source/myscript.py
    

    -spec文件打包
    将配置写道spec文件,然后执行文件,比如:

    pyinstaller "C:\Documents and Settings\project\myscript.spec"
    

    其中参数部分在文档中写了很多,具体可以查看Options说明链接

    2 写脚本打包

    个人比较倾向于这种打包方式。
    首先具体说一以下为什么,因为我在项目中增加了大量的第三方库,简单的使用命令行打包会出现打包失败或者运行后闪退等问题。原因是需要隐式的对一些第三方包进行导入,这个在参数中是提供的,就是:

    --hidden-import MODULENAME, --hiddenimport MODULENAME
    

    这样的话,如果每次都通过命令行打包,在需要隐式导入多个第三方包的时候,就会变得比较繁琐。另外为什么也不是spec文件呢?因为这个东西会被改写!比如有一次使用了命令行打包,则spec文件会根据命令行内容重新生成文件。
    其实脚本打包本质上和命令行是一致的,只是利用了PyInstaller提供的run函数,将参数以数组的形式带入run函数的参数而已。
    举个例子:

    #import相关包
    from PyInstaller.__main__ import run
    
    if __name__ == '__main__':
        #设置参数——携程数组,最后一个是入口文件,#'--hidden-import'就是隐式导入的包
        opts = ['-D',
                '--hidden-import', 'cython',
                '--hidden-import', 'sklearn',
                '--hidden-import', 'sklearn.utils._cython_blas',
                '--clean',
                'app.py']
        #执行run函数
        run(opts)
    

    3 补充说明

    我在falsk中增加了几个数据挖掘需要的包,numpy、pandas、matplotlib、scipy、sklearn等,但在打包的时候出现了大量报错。后来直接hidden import之后成功了。

    4 打包过程说明

    每次打包之后,会生成两个文件夹build和dist,其中dist是可以拷贝部署的,直接运行里面的*.exe即可。
    另外要说明的是,似乎每次打包前要清空dist下的工程文件夹,或者增加-y参数,否则会报错无法继续打包。

    Error: The output directory "C:\Users\nanhao\PycharmProjects\dap\dist\app" is not empty. Please remove all its contents or use the -y option (remove output directory without confirmation).
    

    关于 -y 参数,可以试一下,因为有时候工程存到c盘用户文件夹下,可能会因为权限问题,出现拒绝访问。这时候可以手动将dist下的工程文件夹清空一下

    相关文章

      网友评论

        本文标题:使用PyInstaller将flask打包为一个exe

        本文链接:https://www.haomeiwen.com/subject/oqufnctx.html