文章目录
- pip install pyinstaller
- pyinstaller main.py pyinstaller –onefile main.py pyinstaller –onefile –name=hello main.py
- 参数 说明 –onefile 将所有依赖打包成一个单独的可执行文件。没有这个选项时,生成的可执行文件将依赖于多个文件 –windowed 打包为 GUI 应用程序,不显示控制台窗口(仅适用于 Windows 和 macOS) –name 指定生成的可执行文件的名称 –icon 为生成的可执行文件指定图标文件。图标文件通常为 .ico(Windows)或 .icns(macOS)格式。 –add-data 添加额外的数据文件。格式为 source:destination,其中 source 是本地路径,destination 是可执行文件内的路径。 –hidden-import 手动指定需要包含的模块。如果某些模块在运行时动态导入,PyInstaller 可能无法自动检测到这些依赖项 –exclude-module 手动排除某些模块 示例用法如下: pyinstaller –onefile –windowed –name=my_program –icon=assets/app_icon.ico –add-data=”resources/config.json;resources” –hidden-import=json main.py
- PyInstaller 在首次运行时会生成一个 .spec 文件,这个文件定义了打包的所有配置。你可以编辑这个文件来自定义打包过程。 在生成的 my_program.spec 文件中,你可以自定义一些高级选项,比如添加额外的数据文件、指定打包目录等。 例如,添加一个额外的数据文件到 datas 列表中: datas=[(‘data_folder/*’, ‘data’)] 使用自定义的 .spec 文件进行打包: pyinstaller my_program.spec
- pyinstaller 执行后报错通常为以下类似问题,手动导入模块即可解决 # 未正常导入:Crypto.Cipher.PKCS1_v1_5 ImportError: cannot import name ‘PKCS1_v1_5’ from ‘Crypto.Cipher’ # 未正常导入:Crypto.PublicKey.RSA ImportError: cannot import name ‘RSA’ from ‘Crypto.PublicKey’ # 未正常导入:boto3 ModuleNotFoundError: No module named ‘boto3’ # 未正常导入:tqdm ModuleNotFoundError: No module named ‘tqdm’
- pip install nuitka 同时确保安装了 C 编译器,如 gcc(Linux)、clang(macOS)、msvc(Windows)或者 MinGW-w64(Windows)。 在 Windows 上,建议使用 MinGW-w64。
- nuitka –standalone main.py # 使用pandas nuitka –standalone –onefile –plugin-enable=pandas script.py # 使用tkinter、numpy nuitka –standalone –follow-imports –plugin-enable=tk-inter –plugin-enable=numpy example.py # 打包为单文件 nuitka –standalone –onefile –show-progress –lto=yes script.py
- –standalone:生成一个包含所有依赖的目录 –onefile:将所有内容打包成一个单一的可执行文件,pip install zstandard 可减小大小 –follow-imports:自动导入所需模块 –plugin-enable:用于启用特定的编译插件,例如:tkinter、PyQt5、Numpy等 –show-progress:展示打包进度 –windows-icon:指定程序图标 –windows-disable-console:去掉控制台窗口 –lto=yes:启用链接时优化(Link Time Optimization),可以生成更小、更快的二进制文件。
- 编译 .py 文件为 .pyd nuitka –module your_script.py
目录
- PyInstaller
- 1. 安装
- 2. 基本用法
- 3. 常用参数
- 4. 配置文件
- 5. 常见问题
- Nuitka
- 1. 安装
- 2. 打包命令
- 3. 常用参数
- 4. 其他用途
- 总结
目前最常用的两种方法是使用 Nuitka 和 PyInstaller
- PyInstaller:这是一个非常流行的工具,可以将Python脚本打包为单个可执行文件,支持Windows、macOS和Linux。它还能够自动检测并包含大多数Python包和库。优点是简单易用,缺点是在运行时会释放一堆临时文件。
- Nuitka: 是将Python代码编译为C/C++代码的编译器,然后再使用C/C++编译器生成可执行文件。与其他打包工具相比,它能产生性能更优的可执行文件。优点是打包后文件执行效率高,缺点是打包速度慢且某些库不兼容。
pip install pyinstaller
pyinstaller main.py
pyinstaller --onefile main.py
pyinstaller --onefile --name=hello main.py
| 参数 | 说明 |
|---|---|
| –onefile | 将所有依赖打包成一个单独的可执行文件。没有这个选项时,生成的可执行文件将依赖于多个文件 |
| –windowed | 打包为 GUI 应用程序,不显示控制台窗口(仅适用于 Windows 和 macOS) |
| –name | 指定生成的可执行文件的名称 |
| –icon | 为生成的可执行文件指定图标文件。图标文件通常为 .ico(Windows)或 .icns(macOS)格式。 |
| –add-data | 添加额外的数据文件。格式为 source:destination,其中 source 是本地路径,destination 是可执行文件内的路径。 |
| –hidden-import | 手动指定需要包含的模块。如果某些模块在运行时动态导入,PyInstaller 可能无法自动检测到这些依赖项 |
| –exclude-module | 手动排除某些模块 |
示例用法如下:
pyinstaller --onefile
--windowed
--name=my_program
--icon=assets/app_icon.ico
--add-data="resources/config.json;resources"
--hidden-import=json
main.py
PyInstaller 在首次运行时会生成一个 .spec 文件,这个文件定义了打包的所有配置。你可以编辑这个文件来自定义打包过程。
在生成的 my_program.spec 文件中,你可以自定义一些高级选项,比如添加额外的数据文件、指定打包目录等。
例如,添加一个额外的数据文件到 datas 列表中:
datas=[('data_folder/*', 'data')]
使用自定义的 .spec 文件进行打包:
pyinstaller my_program.spec
pyinstaller 执行后报错通常为以下类似问题,手动导入模块即可解决
# 未正常导入:Crypto.Cipher.PKCS1_v1_5 ImportError: cannot import name 'PKCS1_v1_5' from 'Crypto.Cipher' # 未正常导入:Crypto.PublicKey.RSA ImportError: cannot import name 'RSA' from 'Crypto.PublicKey' # 未正常导入:boto3 ModuleNotFoundError: No module named 'boto3' # 未正常导入:tqdm ModuleNotFoundError: No module named 'tqdm'
pip install nuitka
同时确保安装了 C 编译器,如 gcc(Linux)、clang(macOS)、msvc(Windows)或者 MinGW-w64(Windows)。
在 Windows 上,建议使用 MinGW-w64。
nuitka --standalone main.py
# 使用pandas
nuitka --standalone --onefile --plugin-enable=pandas script.py
# 使用tkinter、numpy
nuitka --standalone --follow-imports --plugin-enable=tk-inter --plugin-enable=numpy example.py
# 打包为单文件
nuitka --standalone --onefile --show-progress --lto=yes script.py
--standalone:生成一个包含所有依赖的目录
--onefile:将所有内容打包成一个单一的可执行文件,pip install zstandard 可减小大小
--follow-imports:自动导入所需模块
--plugin-enable:用于启用特定的编译插件,例如:tkinter、PyQt5、Numpy等
--show-progress:展示打包进度
--windows-icon:指定程序图标
--windows-disable-console:去掉控制台窗口
--lto=yes:启用链接时优化(Link Time Optimization),可以生成更小、更快的二进制文件。
--standalone:生成一个包含所有依赖的目录--onefile:将所有内容打包成一个单一的可执行文件,pip install zstandard 可减小大小--follow-imports:自动导入所需模块--plugin-enable:用于启用特定的编译插件,例如:tkinter、PyQt5、Numpy等--show-progress:展示打包进度--windows-icon:指定程序图标--windows-disable-console:去掉控制台窗口--lto=yes:启用链接时优化(Link Time Optimization),可以生成更小、更快的二进制文件。
编译 .py 文件为 .pyd
nuitka --module your_script.py
以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。
您可能感兴趣的文章:
- 将Python代码打包成可调用SDK的四种方法小结(适用于移动端 App)
- python使用pyinstaller将代码打包为exe程序
- Python打包代码成exe可执行文件的方法总结
- python代码打包工具cx_Freeze的安装及用法详解
- 使用PyInstaller将Python代码打包成独立可执行文件详细步骤
- 将python代码打包成.exe文件直接运行的具体步骤