本文共 2157 字,大约阅读时间需要 7 分钟。
那年初相识
PyInstaller是我用pip下载的第一个模块。初次接触Python时,看到有人能用Python编写工具直接运行在Windows机器下,总觉得这能让开发变得更简单。
这种脱离编译环境和虚拟机而直接运行的能力,是我一直期待的。有人问为何不学C++?那时我只是觉得学习C++编译环境太复杂了。而Python的简洁语法和丰富库让我着迷不已。
看到Python之父那茂密的头发后,我更加坚定了学习Python的决心。
安装pip后,我急着学习如何打包代码,转化为exe文件。在公司内外网隔离的情况下,经过千番折扣终于找到公司镜像源,完成了pyinstaller的下载和配置,最终在日落西山前将简单的print代码打包成exe,向同事炫耀。
现在回想起来,太幼稚了...
一发不可收拾
由于PyInstaller直接跳过了编译环境,我的Python路线从easygui和tkinter开始了。这让我觉得自己装13必备,但在没有扎实基础的情况下学这些可真的是苦得很。
后来慢慢玩腻了,才重新从基础开始学习Python。
Yesterday Once More
最近项目需要在Linux环境下自动化打包、安装和运行多个基础环境。最初打算用shell脚本,但由于涉及大量配置文件,最终选择了Python。可是客户方要求执行脚本在全新的网络隔离机器上运行,这让我又回到PyInstaller的怀抱。
网上搜了一圈,最终还是选择了PyInstaller。它支持多种平台,包括Linux,这正是我们项目需要的。
PyInstaller的优势在于它支持所有Python2.3及以后的版本,能打包更小的文件,还能利用操作系统的动态库支持,确保兼容性。
突然想起萧亚轩的"最熟悉的陌生人"。我们总是觉得自己熟悉了某件事,却忽略了其中的很多细节。
重新学习PyInstaller
安装:使用pip install pyinstaller即可安装。注意,在Windows环境下,需要依赖pywin32模块,且从3.3版本开始,pyinstaller会自动安装此依赖。Linux环境下则需要安装python-devel,建议在首次编译时添加依赖。
配置:在Windows环境下,安装完成后,PyInstaller会在{PythonPath}/Scripts下。注意将Scripts目录添加到环境变量中。Linux环境下,需要创建符号链接:ln -s {PythonPath}/bin/pyinstaller /usr/bin。
核心参数
-F, –onefile:打包为一个单独文件,适用于所有代码在一个.py文件中的情况。
-D, –onedir:打包为多个文件,生成dist目录下的多个依赖文件,适合框架式开发,方便维护。
-K, –tk:在打包时包含TCL/TK库。
-a, –ascii:不包含编码。默认情况下,支持Unicode的Python版本会包含所有编码。
-d, –debug:生成调试版可执行文件。
-w, –windowed, –noconsole:在Windows环境下使用窗口子系统执行,不会打开命令行窗口。
-c, –nowindowed, –console:使用控制台子系统执行,默认情况下只对Windows有效。
-s, –strip:对可执行文件和共享库进行剥离操作。注意Cygwin的strip会导致普通的win32 DLL无法使用。
-X, –upx:如果已安装UPX,会压缩可执行文件(包括Windows的DLL文件)。不建议使用。
-o DIR, –out=DIR:指定生成spec文件的输出目录,默认在PyInstaller根目录下生成。
-p DIR, –path=DIR:设置导入路径,与PYTHONPATH效果相同。可以使用分割符(Windows:分号,Linux:冒号)分隔多个目录。
–icon=FILE.ICO:为可执行文件添加.ico图标(仅适用于Windows)。
–icon=FILE.EXE,N:将.exe文件的第N个图标添加为可执行文件的资源(仅适用于Windows)。
–version=FILE:将指定文件作为可执行文件的版本资源(仅适用于Windows)。
–name=NAME:指定生成的spec文件名。如果省略,第一个脚本的主文件名将作为spec文件名。
不推荐使用的参数
–X, –upx:安装UPX后使用时会压缩文件,但有时会导致异常退出,不建议使用。
打包示例
想知道如何用PyInstaller打包一个简单的Flask程序?以下是一个简单的步骤指南:
执行命令:pyinstaller -F your_flask_program.py
PyInstaller会生成build目录和your_flask_program.spec的spec文件。最终会在dist/your_flask_program.exe生成打包后的可执行文件。
注意:Flask依赖的html模板文件需要单独拷贝到dist目录中,否则可能会出现server error。
希望这篇文章能帮到你。如果觉得有帮助,欢迎关注我的公众号【清风Python】,获取更多Python学习资源。
转载地址:http://hgqc.baihongyu.com/