pyinstaller打包实践

一、概述

        python是一门解释性语言,解释性语言运行时需要解释器解释为中间代码(python为.pyc、java为.class等),再将中间代码翻译为目标机器代码,进行运行。

        我们在开发,或服务器端环境时,可以在python环境下直接运行源代码或混淆后的代码,并无问题。然后,当我们需要将应用分发给普通用户时(如单机演示程序,图表、特效、游戏客户端等),则需要打包编译为可执行程序,方便用户使用。

        此时,就需要用pyinstaller工具进行打包了。

二、参数说明

1、命令格式

usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
                   [--add-data <SRC;DEST or SRC:DEST>]
                   [--add-binary <SRC;DEST or SRC:DEST>] [-p DIR]
                   [--hidden-import MODULENAME]
                   [--additional-hooks-dir HOOKSPATH]
                   [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
                   [--key KEY] [-d {all,imports,bootloader,noarchive}] [-s]
                   [--noupx] [--upx-exclude FILE] [-c] [-w]
                   [-i <FILE.ico or FILE.exe,ID or FILE.icns>]
                   [--version-file FILE] [-m <FILE or XML>] [-r RESOURCE]
                   [--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
                   [--win-no-prefer-redirects]
                   [--osx-bundle-identifier BUNDLE_IDENTIFIER]
                   [--runtime-tmpdir PATH] [--bootloader-ignore-signals]
                   [--distpath DIR] [--workpath WORKPATH] [-y]
                   [--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
                   scriptname [scriptname ...]

2、参数解释

-h, --help	显示此帮助消息并退出

-v, --version	显示程序版本信息并退出。

--distpath DIR	捆绑应用的放置位置(默认值:./ dist)

--workpath WORKPATH

 	所有临时工作文件,.log,.pyz等的放置位置(默认值:./ build)

-y, --noconfirm

 	替换输出目录(默认值:SPECPATH / dist / SPECNAME)而不要求确认

--upx-dir UPX_DIR

 	UPX实用程序的路径(默认值:搜索执行路径)

-a, --ascii	不包括unicode编码支持(默认值:如果可用,则包括在内)

--clean	在构建之前,请清理PyInstaller缓存并删除临时文件。

--log-level LEVEL

 	生成时控制台消息中的详细信息量。LEVEL可能是TRACE,DEBUG,INFO,WARN,ERROR,CRITICAL(默认值:INFO)之一。
		

-D, --onedir	创建一个包含可执行文件的单文件夹捆绑包(默认)

-F, --onefile	创建一个文件捆绑可执行文件。

--specpath DIR	用于存储生成的规范文件的文件夹(默认:当前目录)

-n NAME, --name NAME

 	分配给捆绑的应用程序和规范文件的名称(默认值:第一个脚本的基本名称)

	

--add-data <SRC;DEST or SRC:DEST>

 	要添加到可执行文件中的其他非二进制文件或文件夹。路径分隔符是特定于平台的os.pathsep(;在Windows和:大多数Unix系统上使用)。此选项可以多次使用。

--add-binary <SRC;DEST or SRC:DEST>

 	要添加到可执行文件的其他二进制文件。请参阅该--add-data选项以获取更多详细信息。此选项可以多次使用。

-p DIR, --paths DIR

 	搜索导入的路径(例如使用PYTHONPATH)。允许使用多个路径,以“:”分隔,或多次使用此选项

--hidden-import MODULENAME, --hiddenimport MODULENAME

 	命名在脚本代码中不可见的导入。此选项可以多次使用。

--additional-hooks-dir HOOKSPATH

 	搜索钩子的其他路径。此选项可以多次使用。

--runtime-hook RUNTIME_HOOKS

 	定制运行时挂钩文件的路径。运行时挂钩是与可执行文件捆绑在一起的代码,该代码在执行任何其他代码或模块之前执行以设置运行时环境的特殊功能。此选项可以多次使用。

--exclude-module EXCLUDES

 	可选模块或包(Python名称,而不是路径名),将被忽略(好像未找到)。此选项可以多次使用。

--key KEY	用于加密Python字节码的密钥。



-d <all,imports,bootloader,noarchive>, --debug <all,imports,bootloader,noarchive>
 	
提供调试冻结应用程序的帮助。可以多次提供此参数以选择以下几个选项。



all:以下三个选项。

imports:指定基础Python解释器的-v选项,使该模块在每次模块初始化时打印一条消息,显示加载该文件的位置(文件名或内置模块)。参见 https://docs.python.org/3/using/cmdline.html#id4。

引导程序:告诉引导程序在初始化和启动捆绑的应用程序时发出进度消息。用于诊断缺少进口的问题。

noarchive:不要将所有冻结的Python源文件作为档案存储在生成的可执行文件中,而应将它们作为文件存储在生成的输出目录中。

-s, --strip	将符号表条应用于可执行文件和共享库(对于Windows不建议)

--noupx	即使可用,也不要使用UPX(Windows和* nix之间的工作方式不同)

--upx-exclude FILE

 	防止在使用upx时压缩二进制文件。如果upx在压缩过程中破坏了某些二进制文件,通常使用此方法。FILE是没有路径的二进制文件名。此选项可以多次使用。

	


Windows和Mac OS X特定选项

-c, --console, --nowindowed

 	打开用于标准I / O的控制台窗口(默认)。在Windows上,如果第一个脚本是“ .pyw”文件,则此选项无效。

-w, --windowed, --noconsole

 	Windows和Mac OS X:不提供标准I / O的控制台窗口。在Mac OS X上,这也会触发构建OS X .app捆绑软件。在Windows上,如果第一个脚本是“ .pyw”文件,则将设置此选项。在* NIX系统中,此选项被忽略。

-i <FILE.ico or FILE.exe,ID or FILE.icns>, --icon <FILE.ico or FILE.exe,ID or FILE.icns>

 	FILE.ico:将该图标应用于Windows可执行文件。FILE.exe,ID,从exe中提取具有ID的图标。FILE.icns:将图标应用于Mac OS X上的.app捆绑包

	



Windows特定选项

--version-file FILE

 	从FILE向exe添加版本资源

-m <FILE or XML>, --manifest <FILE or XML>

 	将清单文件或XML添加到exe

-r RESOURCE, --resource RESOURCE

 	向Windows可执行文件添加或更新资源。资源是一到四个项目,FILE [,TYPE [,NAME [,LANGUAGE]]]。FILE可以是数据文件或exe / dll。对于数据文件,至少必须指定TYPE和NAME。LANGUAGE默认为0,或者可以指定为通配符*,以更新给定TYPE和NAME的所有资源。对于exe / dll文件,如果省略TYPE,NAME和LANGUAGE或将其指定为通配符*,则FILE中的所有资源都将添加/更新为最终可执行文件。此选项可以多次使用。

--uac-admin	使用此选项将创建一个清单,它将在应用程序重新启动时请求提升。

--uac-uiaccess	使用此选项可以使提升的应用程序与远程桌面一起使用。





Windows并排程序集搜索选项(高级)

--win-private-assemblies

 	捆绑到应用程序中的任何共享程序集都将更改为私有程序集。这意味着将始终使用这些程序集的确切版本,并且将忽略在系统级别在用户计算机上安装的所有较新版本。

--win-no-prefer-redirects

 	在搜索共享或专用程序集以捆绑到应用程序中时,PyInstaller宁愿不遵循重定向到较新版本的策略,而是尝试捆绑程序集的确切版本。

三、实践

        可选参数很多,我们通常使用的参数组合就很常规了,目的是:将源代码打包成一个exe文件,达到双击exe即可正常运行。

1、单个py文件

pyinstaller -F main.py

-F参数则是生成一个独立exe文件的意思,此时会在执行文件夹下生成build和dist两个文件夹,并在dist文件夹下生成main.exe,双击即可运行

2、多个py文件

pyinstaller -F main.py one.py two.py three.py

 同样的,会以第一个py文件名称,生成对应的可执行文件main.exe

3、资源文件

项目中用到的资源文件,按原目录结构,复制到可执行文件同目录下

4、常见错误

  • No module named 'xxx'

        根据所提示的行号,找到对应的py文件,将依赖的module,对应的加到main.py文件中

  • Failed loading libmodplug-1.dll: 找不到指定的模块

        由于我使用到了pygame,虽然打包成功,但运行时报以上错。解决办法:在python安装目录,搜索libmodplug-1.dll,并将该文件复制到可执行文件同目录下即可

5、其他参数

-w 关闭windows下的console窗口

-i 设置应用程序的icon图标

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值