1.说明
写好的Python程序如果想要拿到其他电脑上运行,那还得安装一下Python环境和各种库,这是比较麻烦的,所以有必要把它打包成一个可执行的exe文件。可以打包exe的库有好多个,比如说pyinstaller、cx_Freeze等。
pyinstaller打包比较简单,如果有需要可以参考之前的文章【Python】使用pyinstaller打包Python程序为EXE可执行程序
但是使用pyinstaller打包出来的程序被360报毒了(主要是我的代码有系统权限操作,会触发报毒机制),后来换成nuitka打包就没有报毒
2.安装环境
最方便的安装方式就是使用pip安装
pip install nuitka
因为nuitka是通过c++的方式进行编译的,所以还需要c++的编译环境,可以手动安装一下
下载链接:https://winlibs.com/#download-release
建议下载压缩包版,之后手动添加到环境变量,即在cmd输入gcc -v
能看到版本信息就应该没问题了
其实不手动安装也行,因为使用nuitka的时候它检测到没有安装就会提示你安装了,到时候输入"yes"就会自动从GitHub上下载安装了。虽然有点慢,但建议让它自动安装
3.打包
在cmd使用nuitka命令加上要打包的py文件就行了,当然,我们需要看看它有哪些好用的选项
nuitka --help
就能看到用法,这里列出几个比较常用的选项
选项 | 说明 |
---|---|
--standalone | 打包成单独的程序(可以拿到其他电脑使用) |
--enable-plugin | 指定需要加载的插件,比如说tk-inter、pyqt5等 |
--plugin-list | 查看支持的插件 |
--output-dir | 输出目录,不指定则是当前工作目录 |
--onefile | 打包成一个文件,即把全部文件压缩成一个(默认是多个文件和文件夹) |
--windows-disable-console | 隐藏控制台窗口 |
--show-progress | 显示打包进度 |
--show-memory | 显示内存占用情况 |
--remove-output | 打包结束之后自动清理build文件夹 |
--windows-icon-from-ico | 指定程序图标(针对Windows系统) |
--mingw64 | 指定使用MinGW6编译(默认是MSYS2) |
--msvc | 指定使用MSVC的版本,不指定则使用系统默认版本 |
--company-name | 公司名 |
--product-name | 产品名 |
--file-version | 文件版本,最多4个数字序列,例如1.0、1.0.0.0 |
--product-version | 产品版本,规则与–file-version相同 |
--file-description | 文件描述 |
下面给出几个命令案例吧
# 使用默认参数打包file_downloader.py
nuitka --standalone "E:\python_downloader\file_downloader_gui.py"
# 指定使用MinGW6编译,使用tkinter插件,隐藏控制台,指定程序图标
nuitka --standalone --mingw64 --enable-plugin=tk-inter --windows-disable-console --windows-icon-from-ico="E:\python_downloader\images\ico\file_downloader.ico" "E:\python_downloader\file_downloader_gui.py"
# 显示进度、内存信息,清理build文件夹
nuitka --standalone --windows-disable-console --show-progress --show-memory --remove-output "E:\python_downloader\file_downloader.py"
# 设置产品信息
nuitka --standalone --company-name=icy --product-name=file_downloader --file-version=1.0 --product-version=1.0 --file-description="多线程下载器" "E:\python_downloader\file_downloader_gui.py"
# 把需要的都加上吧
nuitka --standalone --mingw64 --enable-plugin=tk-inter --windows-disable-console --show-progress --show-memory --remove-output --windows-icon-from-ico="E:\python_downloader\images\ico\file_downloader.ico" --company-name=icy --product-name=file_downloader --file-version=1.0 --product-version=1.0 --file-description="多线程下载器" "E:\python_downloader\file_downloader_gui.py"
提示:
1.如果编译得到的exe文件无法打开(闪退),很有可能是缺少某些文件或者模块,可以在cmd窗口运行exe文件这样能看到报错信息,若cmd中不显示信息,那就在编译的时候不要设置--windows-disable-console
2.操作之前先退出全部卫士类软件避免被拦截
3.如果电脑上安装了微信开发者工具,需要先把它从系统环境变量删掉,不然它会直接读取微信开发者工具中的msvcrt.dll
,并且一定会因为路径的中文字符导致它报错