Nuitka 将 python 程序编译成 exe 指南

发布时间:2026/10/14 10:52:57
Nuitka 将 python 程序编译成 exe 指南 Windows平台编译exe流程安装Nuitkapip install nuitkaWindows环境下编译命令python -m nuitka --mingw64 --standalone --onefile --show-progress --follow-imports your_script.py重要参数说明–standalone生成独立可执行文件无需Python环境–onefile打包成单一exe文件便于分发–windows-console-modedisable隐藏控制台窗口适合GUI程序–output-dir目录名指定输出目录–enable-plugintkinter,pyqt5启用特定GUI框架插件–windows-icon-from-ico图标路径.ico设置exe图标–mingw64参数指定使用MinGW64编译器–standalone 参数会包含所有依赖–onefile 会将所有内容打包成单个 exe 文件注意:如果python程序涉及到网页界面的上面命令不会自动包含templates和static等静态文件目录导致运行时无法找到index.html模板文件需要通过使用–include-data-dir参数显式包含templates目录下的index.html模板。python -m nuitka --mingw64 --standalone --onefile --show-progress --follow-imports --include-data-dirtemplatestemplates your_script.py如果还有static目录CSS/JS/图片等也需要一并包含python -m nuitka --mingw64 --standalone --onefile --show-progress --follow-imports --include-data-dirtemplatestemplates --include-data-dirstaticstatic your_script.py目录结构your_project/├── app.py├── templates/│ └── index.html└── static/ (如果有)Windows平台安装wsl来编译.bin流程安装wslhttps://openx.huawei.com/wsl-auto-setup/overview配置python版本编译python项目安装pyenvcurl https://pyenv.run | bash配置~/.bashrcecho ‘export PATH“HOME/.pyenv/bin:HOME/.pyenv/bin:HOME/.pyenv/bin:PATH”’ ~/.bashrcecho ‘eval “(pyenvinit−−path)′ /.bashrcecho′eval(pyenv init --path) ~/.bashrc echo eval (pyenvinit−−path)′/.bashrcecho′eval(pyenv virtualenv-init -)”’ ~/.bashrcsource ~/.bashrc安装Python 3.12.5pyenv install 3.12.5设置全局默认版本pyenv global 3.12.0设置当前目录版本pyenv local 3.11.5设置shell临时版本pyenv shell 3.10.12进入项目目录cd /mnt/d/your_nuitka_project创建并激活虚拟环境pyenv virtualenv 3.12.5 nuitka-envpyenv activate nuitka-env安装Nuitkapip install nuitka编译项目保留命令行参数支持python -m nuitka --standalone --onefile --show-progress–follow-importsyour_script.py如果编译后的exe运行时提示ModuleNotFoundError根据错误信息添加相应的–include-package参数即可一般无需这个参数。另外python程序依赖的外部库wsl本地需要先安装完成后续再执行nuitka命令自动打包exe时才能顺利打包依赖库。测试生成的可执行文件./your_script.bin --your-parameters注意如果python程序涉及到网页界面的使用Nuitka将Flask应用编译成exe时它不会自动包含templates和static等静态文件目录导致运行时无法找到index.html模板文件需要通过使用–include-data-dir参数显式包含templates目录下的index.html模板。python3 -m nuitka --standalone --onefile --show-progress --follow-imports --static-libpythonyes --include-data-dirtemplatestemplates app.py如果还有static目录CSS/JS/图片等也需要一并包含python3 -m nuitka --standalone --onefile --show-progress --follow-imports–include-data-dirtemplatestemplates–include-data-dirstaticstaticapp.py目录结构your_project/├── app.py├── templates/│ └── index.html└── static/ (如果有)Linux版本的常见报错运行bin时提示Segmentation fault内存问题导致首先检查并升级Nuitka版本检查当前版本python -m nuitka --version升级到最新版本pip install --upgrade nuitka然后增加栈大小限制关键步骤临时增加栈大小ulimit -s 8192 # 设置为8MB然后重新编译python -m nuitka --standalone --onefile --show-progress --follow-imports–include-data-dirtemplatestemplatesapp.py运行bin时提示Ubuntu系统版本导致。这个错误表明你编译的程序需要 GLIBC 2.33 版本但你的运行环境中没有这个版本的库。 这是 Linux 系统上常见的兼容性问题通常发生在较新系统上编译的程序在较旧系统上运行时。建议最安全的方法是在目标系统相同或更低版本的 Linux 系统上编译。Linux环境下运行./main.bin时输入配置文件需输入全路径例如输入 ./config/icbc_config.json可能会遇到代理问题报错HTTP proxy handshake with ipv4:127.0.0.1:3131 failed: UNKNOWN: HTTP proxy returned response code 504此时禁用Linux系统代理即可解决unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy如果是在虚拟机运行的Linux系统上运行程序需要注意将config文件中的网关ip地址修改为Linux系统内的ip地址。ip addr #Linux下查看IP地址