美文网首页
Pyinstaller新手向导

Pyinstaller新手向导

作者: 镜月花水 | 来源:发表于2021-02-02 18:41 被阅读0次

    用python写了一个小程序,考虑到给到windows用户方便使用,就想着打包成exe。于是搜索了下python打包成exe的方法,查阅了一些资料,最终觉得pyinstaller相对比较成熟,于是就先采用pyinstaller了。

    因为没有找到比较全面中文新手pyinstaller向导,所以决定写一个。

    虽然我写了下面的内容,单依然认为,学习使用一个工具,最好的资料是官方文档。
    所以有条件的同学请阅读官方文档

    1. 安装

    Pyinstaller支持Windows,MacOS,Linux,以及AIX, Solaris, FreeBSD and OpenBSD但是不支持跨平台编译,所以Window运行的程序只能在Windows编译,其他平台也一样。
    一般来说

    pip install pyinstaller
    

    就够了,当然还可以通过源码安装,下载安装包,或者在Mac上还可以通过其他的包管理工具MacPorts或者Homebrew安装

    2. 检查安装

    通过命令

    pyinstaller --version
    

    如果成功输出版本号,则安装成功了,同时你还可以查看安装路径下,安装成功的可执行文件。(具体细节可以查看官方文档)

    3. 安装成功的命令

    pyinstaller
    pyi-makespec
    pyi-archive_viewer
    pyi-bindepend
    pyi-grab_version
    

    后面四个命令也不常用,安装方式的不一样,可能会导致后面几个命令没有安装上,如果需要,请阅读官方文档Installed commands这一章。

    4. 工作原理

    最简单的打包方式

    pyinstaller hello.py
    

    这行命令后面的做的事情时,Pyintaller先分析hello.py依赖的其他模块和库。然后把所有这些依赖的文件(包括当前的python的解释器)copy到指定的文件夹(如果你制定打包成一个文件的话,最终会打包成一个文件)

    最终打包成功的文件,不需要用户安装任何库和依赖,Python也不用装,就可以运行。因为如上面所述,打包的文件中已经包含了所有。

    4.1 寻找依赖

    Pyinstaller寻找脚本中所有import语句,然后找到这些语句指向的文件中的import,然后再递归。最终找到所有的依赖。

    需要注意的是,Pyinstaller只支持通过常规imports引入的依赖,一些其他的方式,pyinstaller是找不到的,例如import(), imp.find_module(), sys.path等。这个时候需要给pyinstaller其他的信息才可以完整依赖分析

    • 通过pyinstaller 命令 传入其他文件
    • 也可以通过命令传入额外的import 路径
    • 也可以修改pyintaller 生成的 hello.spec文件
    • 也可以自己写一个hook文件

    依赖出错怎么办,如果

    4.2 隐藏源码

    Python编译后的字节码可以用AES256加密,通过传参

    pyinstaller --key '12345678' hello.py
    

    但是AES是对称加密,秘钥就藏在包里,而且按照官方文档的说话,是比较容易找到秘钥的。但是可以一定层面防住小白。

    5. 打包

    5.1 命令行

    命令行输入

    pyinstaller hello.py
    

    会在当前目录下生成build和dist文件,dist文件夹下面会有hello文件夹,里面里面包括hello可执行文件以及所有的依赖


    1.png

    当然如果输入

    python --onefile hello.py
    

    得到的就是一个可执行文件,在window上就是exe文件。
    [图片上传失败...(image-c5e3df-1612262477240)]

    我们还可以传参指定icon,那么打包出来就是一个有icon的应用程序。
    还有其他的很多参数,比方说修改打包目标文件夹,运行时是否有命令行,具体请查看官方文档。

    5.2 打包脚本

    也可以在py脚本中调用PyInstaller.main.run()来执行打包
    例如

    PyInstaller.__main__.run([
    'hello.py'
    '--key',
    '12345678',
    '--onefile',
    '--distpath',
    'dist/tmp'
    ])
    

    6. 查看打包

    使用上文中提到的命令pyi-archive_viewer 查看打包出来的包,如下:


    2.png

    7. 跑一个玩玩

    了解一个工具最好的方式就是跑起来玩一玩,写一个hello world程序,用pyinstaller打包试试,加上各种参数看看效果,基本用法就掌握了。

    相关文章

      网友评论

          本文标题:Pyinstaller新手向导

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