将 Python 开发的软件从 .py
文件转换成 .exe
文件,可以通过使用一些工具来完成,最常用的工具是 PyInstaller。它可以将 Python 脚本打包成独立的可执行文件(.exe
),使得用户无需安装 Python 环境也能运行你的程序。
1、.py文件,这个文件是一个完整的软件
2、打开命令行,安装pyinstall库
pip install pyinstaller
3、命令行中,导航到.py文件所在目录下
例:
4、pyinstaller xxx.py,替换xxx.py为你的python脚本的文件名
pyinstaller xxx.py
例:
(附另一种打包方式:pyinstaller --onefile xxx.py。--onefile
参数可以将所有依赖文件打包成一个 .exe
文件。如果不加 --onefile
,会生成一个文件夹,里面包含多个文件和 .exe
文件。)
pyInstaller 会自动分析你的 Python 脚本,检查它所依赖的库,并将所有这些依赖打包到 .exe
文件中。这个过程可能需要几分钟,具体时间取决于你程序的复杂性和依赖库的数量。
5、等待运行结束,运行产生如下文件:
6、打开dist文件夹,打开xxx文件夹,内含一个可执行文件
例:
双击该.exe文件即可运行
(运行时,如果程序有图形界面,它就像一个普通的 Windows 程序一样运行。如果是命令行程序,会在命令行窗口中运行。)
常用参数:
1. --onefile
将所有的依赖文件和程序代码打包成一个单独的 .exe 文件。默认情况下,PyInstaller 会生成一个文件夹,其中包含 .exe 文件和所有依赖库,使用 --onefile 可以将它们打包成一个单独的文件。
2. --noconsole 或 --windowed
适用于图形界面程序,防止程序在运行时打开命令行窗口。常用于使用 Tkinter、PyQt 等图形库的程序。
3. --icon=<icon_path>
为生成的 .exe 文件指定一个图标。图标文件必须是 .ico 格式。
4. --add-data=<source;destination>
将外部数据文件(如配置文件、图片、数据库文件等)包含进打包的程序中。
例如,打包时包括一个图片文件:
pyinstaller --add-data="data/image.png;data" xxxx.py
这个参数会将 image.png 文件放到 data 文件夹中,xxxx.py 中可以通过相对路径来访问它。
5. --add-binary=<source;destination>
类似于 --add-data,但用于添加二进制文件(例如 .dll 文件、.so 文件等)。
6. --clean
在每次打包之前,删除旧的缓存和临时文件,确保生成干净的打包。
7. --distpath=<path>
指定 .exe 文件输出目录。默认情况下,PyInstaller 会将生成的 .exe 文件放到 dist/ 目录下。
8. --workpath=<path>
指定临时工作目录,PyInstaller 会将一些临时文件存放在这个目录中(如临时解压文件、编译缓存等)。
9. --specpath=<path>
指定 .spec 文件的输出目录。.spec 文件是 PyInstaller 打包过程中的配置文件,可以自定义打包细节。如果你需要修改默认的打包行为,可以编辑 .spec 文件。
10. --upx-dir=<directory>
如果你想在打包时使用 UPX(一个可执行文件压缩工具)来压缩生成的 .exe 文件,可以使用这个参数指定 UPX 所在目录。
11. --debug
启用调试模式,会在执行过程中输出详细的调试信息。如果你的程序在打包过程中有问题,可以通过此参数获取更多信息。
12. --no-upx
禁用 UPX 压缩。如果你希望生成的 .exe 文件不被压缩,可以使用这个参数。
13. --strip
去除可执行文件中的调试信息和符号,减小文件体积。
14. --hidden-import=<module>
有时 PyInstaller 无法自动识别某些动态导入的模块(例如通过 importlib 导入的模块),可以使用此参数手动指定这些模块。
15. --runtime-hook=<hook_file>
指定运行时钩子文件(.py 文件),它将在打包程序启动时执行。可以用来处理特殊的运行时需求。
16. --no-patchelf
避免使用 patchelf(一个在 Linux 上修改 ELF 文件的工具),用于解决一些特定平台上的兼容性问题。
17. --clean
在每次构建时清理旧的缓存和临时文件。这可以防止一些潜在的错误,特别是在对 .spec 文件进行修改后。