pyinstaller

pyinstaller 常用的命令

--hidden-import  :当打包报错,no modult name xxx时可以使用这个命令或者,先在本地环境中安装本模块。

pyinstaller --hidden-import=xxx test.py

 给应用程序加上图标

注意:使用的图片必须是.ico的文件,如果是其他的文件改为ico的后缀是没有作用的。

pyinstaller -F -w -i ./1.ico belle.py

如果一切操作都是正确的,但是应用程序还是没有生成图标的话,可能是缓存的原因,只需把生成的可执行文件拖动位置即可。

添加资源

--add-data=SRC;DEST
#其中SRC为需要添加文件的路径
#DEST为可执行文件运行时,生成资源的路径,使用相对路径,相对于临时路径_MEIxxx

注意:在win10上在路径参数上是需要添加引号。

添加资源之后,如果需要使用资源的话,必须先找到生成的临时目录,然后再构建完整的路径使用文件

def  res_path(relative_path):
    """获取资源绝对路径"""
    try:
        base_path = sys._MEIPASS
        print(base_path)
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

#如果打包使用--add-data=/images/1.ico;images  ,则生成的图片会在_EIxxxx/images中。
#使用的话res_path('images/1.ico')

添加资源不仅仅可以添加图片,还可以添加可执行文件,压缩文件,txt,excel,json,html

添加二进制文件使用--add-binary

单文件模式下是如何运行的

当我们双击可执行文件后,启动装置会先在系统存放临时文件的路径下生成一个临时文件夹。该文件被命令为_MEIxxxx,xxxxs是一串数字。

 使用sys._MEIPASS可以获取临时文件,但是需要可执行程序运行的时候,才能获取到路径。

在单文件模式下打包时,Pyinstaller会把所有依赖都打包到可执行文件中,我们最后只有一个文件,那么当我们运行该可执行文件时,会把所有相关的依赖全部解压出来,并将依赖的副本全部存放在临时文件夹

临时文件夹_MEIxxx中。这解压又拷贝的操作肯定需要花些时间,这也是为什么单文件模式下打包的程序运行时比文件夹模式下要慢的多的原因。

注意:临时文件在程序关闭的时候会自动的删除的,但是如果程序运行崩溃,或者被人为强制退出的话,那临时文件是不会自动移除的。

使用--runtime-tmpdir 命令可以改变临时文件生成的位置。

 运行钩子

钩子分为:运行钩子和分析钩子,运行钩子是提前运行并对环境特定的设置,分析钩子是分析好让Pyinstaller知道要导入哪些模块或资源。

运行钩子是编译的可执行程序 运行之前先执行运行钩子,如

pyinstaller --runtime-hook=text1.py --add-data=pic.zip;. -F -w text2.py
#执行可执行程序先运行text1.py文件,再执行text2.py文件。

 批处理文件

pyinstaller --clean -y -i=images/1.ico -c -F -n=test --add-data=images/1.ico;images  pilotStats_main.py
人生苦短,我用cnblog
原文地址:https://www.cnblogs.com/wuzhibinsuib/p/13449825.html