You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyInstaller或cx_Freeze编译py-cpuinfo模块时出现进程异常占满CPU问题求助

解决PyInstaller/cx_Freeze打包py-cpuinfo脚本后爆进程的问题

这个问题我之前碰到过,根源在于py-cpuinfo默认会通过shell执行系统命令获取CPU信息,但打包后的可执行文件在调用这些命令时,会错误地递归启动自身,导致无限创建进程直至占满CPU。而开发模式下直接跑Python脚本时,shell调用的是系统原生命令,所以不会有问题。

下面给你两种可行的解决方法:

方法1:修改脚本,禁用py-cpuinfo的shell调用

这是最直接的解决方案,只需要在调用get_cpu_info()时添加allow_shell=False参数,让py-cpuinfo不通过shell获取信息,改用纯Python的方式收集CPU数据:

修改后的testcpu.py代码:

from cpuinfo import get_cpu_info
# 禁用shell调用,避免打包后递归启动自身
print(get_cpu_info(allow_shell=False))

之后用你原来的PyInstaller命令重新打包即可:

pyinstaller --noconfirm --onedir --console "C:/Users/Mouad/Desktop/Payloads/cookies-grabber/testcpu.py"

方法2:针对PyInstaller的额外配置(可选)

如果方法1无法满足你的需求(比如需要shell调用才能获取完整CPU信息),可以尝试在PyInstaller的spec文件中添加对py-cpuinfo的隐藏导入,并指定系统命令的路径:

  1. 先生成spec文件:
pyinstaller --noconfirm --onedir --console --specpath ./specs "C:/Users/Mouad/Desktop/Payloads/cookies-grabber/testcpu.py"
  1. 打开生成的spec文件,在hiddenimports中添加cpuinfo相关模块:
hiddenimports=['cpuinfo', 'cpuinfo.cpuinfo']
  1. 同时,在datas中添加系统命令的路径(比如Windows下的wmic.exe),确保打包后的程序能找到原生命令而不是调用自身:
# Windows示例
datas=[('C:/Windows/System32/wmic.exe', '.')]
  1. 最后用spec文件重新打包:
pyinstaller ./specs/testcpu.spec

不过更推荐方法1,因为它简单且能从根源避免递归进程的问题。

内容的提问来源于stack exchange,提问作者Mouad Essalim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 16:53:10