使用Nuitka编译.py为.exe时遭遇fatal error C1060的解决方法
解决Nuitka编译时fatal error C1060(系统内存不足)的方案
问题背景
用Nuitka编译含yt-dlp和PyQt5的Python脚本为单文件EXE时,MSVC编译器触发fatal error C1060: 系统内存不足,报错集中在yt-dlp的大型提取器模块(如youtube.cpp、lazy_extractors.cpp)。
编译命令:
nuitka --onefile --jobs=4 --disable-ccache --plugin-enable=pyqt5 --windows-icon-from-ico=youtube-downloader-icon.ico downloader.py
核心报错片段:
module.yt_dlp.extractor.youtube.cpp(127845): 致命错误 C1060: 系统内存不足 module.yt_dlp.extractor.lazy_extractors.cpp(469234): 致命错误 C1060: 系统内存不足
可行解决办法
1. 降低并发编译任务数
当前--jobs=4开启4个并行编译任务,每个yt-dlp大模块编译都会占用大量内存,并行运行直接耗尽系统内存。
- 修改命令,缩小jobs值,比如改为1或2:
nuitka --onefile --jobs=1 --disable-ccache --plugin-enable=pyqt5 --windows-icon-from-ico=youtube-downloader-icon.ico downloader.py
2. 剔除yt-dlp冗余提取器
yt-dlp的lazy_extractors包含数百个网站的提取器,多数对YouTube下载器无用,可通过代码只保留需要的提取器:
- 在脚本开头添加以下代码:
import yt_dlp # 仅保留YouTube提取器 yt_dlp.extractor.gen_extractors = lambda: [yt_dlp.extractor.get_extractor('Youtube')()]
这样编译时只会处理YouTube相关模块,生成的C++文件体积骤减,内存占用大幅降低。
3. 升级Nuitka版本
当前使用的Nuitka 1.5.4对Python 3.11仅为实验性支持,新版本针对大模块编译和内存优化有改进:
- 执行命令升级:
pip uninstall nuitka -y pip install nuitka --upgrade
4. 释放系统内存
- 关闭浏览器、IDE、虚拟机等占用内存的程序,把内存留给编译器。
- 物理内存不足时,可临时增大Windows虚拟内存(路径:控制面板→系统→高级系统设置→性能→设置→高级→虚拟内存→更改)。
5. 切换到MinGW编译器
MSVC编译大文件时内存占用比MinGW更高,可尝试更换编译器:
- 先安装MinGW-w64,再用以下命令编译:
nuitka --onefile --jobs=2 --disable-ccache --plugin-enable=pyqt5 --windows-icon-from-ico=youtube-downloader-icon.ico --mingw64 downloader.py
内容的提问来源于stack exchange,提问作者notseriouss
相关产品推荐
相关产品推荐

