2018网站建设涉及,wordpress pckr,免费装修设计软件,陕西省西安市制作网站PyInstaller可以将Python程序打包成一个exe程序来独立运行#xff0c;用户使用时只需要执行这个exe文件即可#xff0c;不需要在机器上再安装Python及其他包就可运行了。另外#xff0c;PyInstaller相较于其他打包程序#xff0c;比如py2exe#xff0c;大多时候使用起来更…PyInstaller可以将Python程序打包成一个exe程序来独立运行用户使用时只需要执行这个exe文件即可不需要在机器上再安装Python及其他包就可运行了。另外PyInstaller相较于其他打包程序比如py2exe大多时候使用起来更加方便可以通过命令行的一些简单命令即可进行打包当然当你需要打包的程序比较大且复杂时使用哪个打包程序可能差别都不会太大了这时候就看个人的习惯和爱好了。
#我的Python教程
#官方微信公众号wdPythonpip安装PyInstallerpip install pyinstaller
pip更新PyInstallerpip install --upgrade pyinstaller 简单打包命令
pyinstaller [-F/-D] [-w/-c] [-i xxx.ico] xxx.py/xxx.spec
xxx.py/xxx.spec需要打包的程序main文件或者spec文件。spec文件在使用py文件进行打包时会在相同路径下自动生成spec中的内容也是根据命令行中输入的内容来生成的也可以使用命令pyi-makespec [options] xxx.py来生成一个纯粹的spec文件而不会去执行打包的操作。 -F/–onefile将整个程序打包为一个exe文件需要注意的是与-D模式生成的exe程序相比在启动速度上会慢一点原因是它需要先解压exe文件并生成一个唯一的临时环境来运行程序关闭环境时也会自动删除这个临时环境-D模式的程序本身就是解压好的运行完也不需要执行删除操作当程序比较大时这个差别就很明显了。 -D/–onedir默认选项与F/–onefile参数作用相反将程序打包为一个文件夹文件夹中包含启动程序的exe文件和其他依赖的资源文件和DLL文件等。 -w表示程序运行后隐藏命令行窗口当你不需要使用命令行窗口作为程序的I/O时比如GUI程序可以使用这个参数选项。 -c默认选项与-w相反提供一个命令行窗口进行I/O。 -i/–icon指定exe程序图标。
一般来说大多数的程序特别是一些小程序使用这个命令就可以顺利的打包了也用不到其他复杂的参数选项。如果需要其他的知识点以下的一些点可以参考下这些点是自己在官方文档上找的有些并没有经过验证有错欢迎指正
命令行指定参数选项方式打包
build文件夹运行后会在同路径下生成一个build文件夹这个文件夹的作用相当于PyInstaller的工作空间PyInstaller运行相关的文件和日志都在这个文件夹中打包完成后可以直接删除。 dist文件夹运行完成后会在同路径下生成一个dist文件夹这个文件夹下有一个跟程序同名的文件夹打包好的exe程序就在这个文件夹下。 多py文件如果命令行中指定的py文件不止一个比如“pyinstaller xxx1.py xxx2.py”pyinstaller会依次分析并执行并把第一个py名称作为spec和dist文件下的文件夹和程序的名称。
其他常用参数选项 –specpath DIR指定生成spec文件的路径默认为当前路径。 -n NAME/–name NAME指定spec文件和程序的名称默认就是传入的py脚本或spec文件的名称。 -h/–help显示PyInstaller帮助信息。 -v/–version显示PyInstaller版本信息。 –distpath DIR指定生成dist的目录默认为“./dist”。 –workpath WORKPATH指定pyinstaller的工作目录即build文件夹默认为“./build”。 -y/–noconfirm替换输出目录时不询问默认输出目录是“SPECPATH/dist/SPECNAME”。 –upx-dir UPX_DIR指定UPX程序的路径默认为“程序执行路径”即双击某个文件时系统自动查找对应程序的路径。UPX为一个压缩程序需要自行下载可以将exe压缩为zip格式的文件并且压缩效率非常高如果打包后的exe程序非常大的话为了避免客户下载时文件太大的问题可以使用这个UPX工具。 –noupx不需要UPX即便可用。 -a/–ascii不支持Unicode默认为支持如果可用的话。 –clean在pyinstaller开始执行之前清除缓存并删除临时文件一般存储在C:\Users\Administrator\AppData\Roaming\pyinstaller。 –log-level LEVEL指定打印的日志等级默认为INFO日志等级有TRACEDEBUGINFOWARNERRORCRITICAL。如果在打包时遇到了问题为了方便定位问题可以使用这个参数来查看特定级别的日志信息。 数据绑定和搜索相关的参数选项 –add-data SRC;DEST指定需要添加非二进制文件路径或者文件夹路径比如图片和pdf文件等这个选项可以使用多次。这个命令其实就是将需要的文件或者文件夹拷贝到指定的路径下在-D模式下可以看情况在程序打包完成后自己手动拷贝过去。 –add-binary SRC;DEST指定需要添加的二进制文件路径比如DLL文件、动态链接库或者共享文件对象等这个选项可以使用多次。同-add-data命令一样是一个拷贝数据的功能。 -p DIR/–paths DIR指定import语句的查找路径与PYTHONPATH一样多个路径之间可以使用分号“;”连接或者多次使用这个选项来进行指定。 –hidden-import MODULENAME/–hiddenimport MODULENAME指定脚本中需要隐式导入的模块比如在__import__、imp.find_module()、exec、eval等语句中导入的模块这些模块PyInstaller是找不到的需要手动指定导入这个选项可以使用多次。 –additional-hooks-dir HOOKSPATH指定额外hook文件可以是py文件的查找路径这些文件的作用是在PyInstaller运行时改变一些Python或者其他库原有的函数或者变量的执行逻辑并不会改变这些库本身的代码以便能顺利的打包完成这个选项可以使用多次。 –runtime-hook RUNTIME_HOOKS指定自定义的运行时hook文件路径可以是py文件在打好包的exe程序中在运行这个exe程序时指定的hook文件会在所有代码和模块之前运行包括main文件以满足一些运行环境的特殊要求这个选项可以使用多次。 –exclude-module EXCLUDES指定可以被忽略的可选的模块或包因为某些模块只是PyInstaller根据自身的逻辑去查找的这些模块对于exe程序本身并没有用到但是在日志中还是会提示“module not found”这种日志可以不用管或者使用这个参数选项来指定不用导入这个选项可以使用多次。 –key KEY指定用于Python字节码加密的keykey是一个16个字符的字符串。 -D模式程序的运行运行程序的时候其实开始运行的是一个pyinstaller生成的引导加载程序bootloaderbootloader是根据不同的操作系统生成的运行bootloader时会创建一个临时的Python环境以便运行Python程序所以使用exe程序时不用安装Python也能运行这个程序。 -F模式程序的运行也会有一个BootLoader但是会根据操作系统创建一个名为_MEIxxxxxx的文件夹用作这个程序的临时运行环境不只是Python环境这个xxxxxx是一个随机的数字。-F模式程序启动的时候因为需要解压并拷贝依赖和资源文件到临时运行环境_MEIxxxxxx所以启动速度是比-D模式程序要慢的运行结束后会删除临时运行环境的文件夹。在Linux和相关系统中可能有“no-execution”选项但是对于-F模式程序是不兼容的。由于_MEIxxxxxx是唯一的所以可以同时运行多个程序多个程序时互不干涉的。如果程序崩溃了或者强行结束了比如在Windows的任务管理器中杀死了进程_MEIxxxxxx文件夹是不会被删除的所以频繁崩溃或者结束进程会导致有多个_MEIxxxxxx文件夹会非常占用磁盘空间可以使用–runtime-temdir指定_MEIxxxxxx的存放位置。-F模式程序如果在运行时遇到了权限问题可以使用-D模式程序替代。 shell脚本/批处理脚本使用命令行打包时可能需要指定的参数选项很多这时候可以将需要执行的全部命令信息包括这些参数选项的指定都放在一个shell脚本或者批处理文件中来执行。
运行时信息 file 所有基于模块的使用到__file__属性的代码在源码运行时表示的是当前脚本的绝对路径但是打包后就是当前模块的模块名即文件名xxx.py。 sys.frozen源码运行时没有这个属性打包后的程序添加了这个属性值为True。 sys.MEIPASS 源码运行时没有这个属性打包后的程序添加了这个属性表示程序运行的绝对路径。对于-D模式程序表示的是这个exe程序所在文件夹的绝对路径对于-F模式程序表示的是_MEIxxxxxx的文件夹绝对路径MEIxxxxxx为exe解压后创建的临时运行环境的文件夹名称对于exe程序每一次运行来说它是唯一的。 sys.excutable代码运行时表示运行的解释器绝对路径如C:\Python36\python.exe在打包的程序中就是exe程序文件的绝对路径这个是用来定位用户运行该程序的真实位置。 sys.argv[0]一般来说就是运行程序的绝对路径但是在不同平台或者不同的方式启动程序时会有所不同比如通过符号链接运行的程序sys.argv[0]就是符号名称而不是真实的程序路径。 数据文件的修改–add-data这种通过拷贝形式的数据文件在-D模式下如果在运行时修改了那么对应的数据文件是真的被修改了但是在-F模式下由于每次运行会单独创建一个临时运行环境修改的内容也是临时运行环境中的内容并且运行完后会自动删除临时运行环境所以这种数据文件是无法直接更改exe中的数据文件的也就意味着每次运行程序数据文件都会是exe程序中原来的那一份修改的内容会随着临时运行环境的关闭而删除了不会同步到exe程序中的。 发生错误时 当发生“module not found”警告时其实很多找不到对应模块的消息都不用管只是PyInstaller根据自身的逻辑去查找的因为它们并不是跟你的最终程序有关的。 当发生导入失败时这才是真正的错误需要去关注和解决的。 当打包成功且中间没有发生任何警告提示但是运行程序时提示某个模块找不到可能就是“–hidden-import”的问题了当使用__import、imp.find_module()、exec、eval或者Python/C API时pyinstaller不会自动去导入这些里面涉及的导包所以这些包就需要使用“–hidden-import”来指定具体需要导入的包了。 –runtime-hookxxx.py中指定的py会依次在打包的主程序main脚本之前运行可以用来改变一些函数或者变量以满足特殊场景的要求。
spec配置文件方式打包
生成spec文件pyi-makespec [options] xxx.py [other scripts…]生成spec文件时可以什么都不指定然后在生成的spec文件中单独配置默认为-D模式下的spec文件也可以指定生成-F模式的spec文件。当然也可以在第一次就将参数选项指定好以后就只维护spec文件。 参数选项生成spec文件的参数选项和命令行模式下执行PyInstaller打包是完全一样的。 spec文件类型spec文件其实就是一个py文件在编辑时可以直接将它当成一个py文件来使用。 spec文件优势一般情况而言直接使用PyInstaller命令行直接打包即可但是以下情况使用spec文件的话会方便一些 程序需要绑定一些数据文件可以在spec文件中单独用一个列表变量来指定可读性和可维护性会高很多。 需要include一些PyInstaller不知道的动态链接库如.dll/.so文件同样可以在spec文件中单独用一个列表变量来指定。 需要往可执行文件中添加一些运行时选项如hook文件。 关于spec文件
如果有需要可以通过PyCharm、eclipse等工具打开安装目录中的PyInstaller文件夹来查看源码信息 aAnalysis类的实例要求传入各种脚本用于分析程序的导入和依赖。a中内容主要包括以下四部分scripts即可以在命令行中输入的Python脚本pure程序代码文件中的纯Python模块包括程序的代码文件本身binaries程序代码文件中需要的非Python模块包括–add-binary参数指定的内容datas非二进制文件包括–add-data参数指定的内容。 pyzPYZ的实例是一个.pyz文件包含了所有pure中的所有Python模块。 exeEXE类的实例这个类是用来处理Analysis和PYZ的结果的也是用来生成最后的exe可执行程序。 collCOLLECT类的实例用于创建输出目录。在-F模式下是没有COLLECT实例的并且所有的脚本、模块和二进制文件都包含在了最终生成的exe文件中。 Analysis参数scripts也是第一个参数它是一个脚本列表可以传入多个py脚本效果与命令行中指定多py文件相同即py文件不止一个时比如“pyinstaller xxx1.py xxx2.py”pyinstaller会依次分析并执行并把第一个py名称作为spec和dist文件下的文件夹和程序的名称。 Analysis参数pathex同命令“-p DIR/–paths DIR”其实默认就有一个spec的目录如果使用命令添加的话会首先添加命令中指定的目录再添加默认的路径。 Analysis参数datas即添加数据文件命令是–add-dataspec文件中是Analysis的datas[]参数datas是一个元素为元组的列表每个元组有两个元素都必须是字符串类型元组的第一个元素为数据文件或文件夹元组的第二个元素为运行时这些文件或文件夹的位置。例如datas[(‘src/README.txt’, ‘.’), ]也可以在命令行中这样写pyinstaller --add-data ‘src/README.txt;.’ myscript.py表示打包时将文件src/README.txt添加copy到相对于spec文件的根目录下指定文件时是相对于spec来进行寻找的而不是要打包的exe程序路径。也可以使用通配符datas [ (‘/mygame/sfx/*.mp3’, ‘sfx’ ) ]表示将/mygame/sfx/目录下的所有.mp3文件都copy到sfx文件夹中。也可以添加整个文件夹datas [ (‘/mygame/data’, ‘data’ ) ]表示将/mygame/data文件夹下所有的文件都copy到data文件夹下。 Analysis参数binaries添加二进制文件效果同命令–add-binary也是一个列表定义方式与datas参数一样。 Analysis参数hiddenimports同命令“–hidden-import MODULENAME/–hiddenimport MODULENAME”。 Analysis参数hookspath同命令“–additional-hooks-dir HOOKSPATH”。 Analysis参数runtime_hooks同命令“–runtime-hook RUNTIME_HOOKS”。 Analysis参数excludes同命令“–exclude-module EXCLUDES”。 exe参数console设置是否显示命令行窗口和命令-w/-c作用一样。 exe参数icon设置程序图标和命令-i/–icon作用一样。某些情况直接执行“pyinstaller xxx.py”时生成的spec中没有这个参数需要手动添加参数值就是图片路径的字符串。 PyInstaller全局变量这些全局变量可以在spec文件使用。 DISTPATH相对于dist文件夹的相对路径如果–distpath参数选项被指定了则使用被指定的参数值。 HOMEPATHpyinstaller查找的绝对路径一般是Python解释器的site-packages文件夹的绝对路径。 SPEC在命令行中指定的spec文件路径。 SPECPATHos.path.split(SPEC)的第一个值。 specnmspec文件的文件名不含文件类型后缀。 workpath相对于build文件夹的相对路径如果workpath参数选项被指定了这使用被指定的值。 WARNFILE在build文件夹中警告文件的全路径一般是warn-myscript.txt 指定了相同的参数当命令行和spec中指定了相同的参数选项那么命令行的参数选项会被忽略。