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

使用py2exe打包exe后跨PC运行报错:DLL加载失败

解决py2exe打包psutil后跨PC运行DLL缺失的问题

这种情况我之前踩过坑!问题根本不是psutil的Python模块没打包进去——你看到的dist/library/psutil里的文件确实都在,但psutil的底层模块(_psutil_windows.pyd)依赖的Windows系统级DLL没被py2exe打包,而你的开发机上本来就有这些DLL,所以本地运行正常,目标PC没有就报错了。

下面给你几个靠谱的解决思路:

1. 先定位到底缺哪个DLL

首先得明确是哪个系统DLL找不到,别瞎猜:

  • 用Dependency Walker工具打开dist/library/psutil/_psutil_windows.pyd,它会列出所有依赖的DLL,标红的就是缺失的(通常是VC++运行库相关的,比如vcruntime140.dll、msvcp140.dll这类)。
  • 或者在目标PC上打开「事件查看器」→「Windows日志」→「应用程序」,里面的错误日志会直接告诉你缺失的DLL名称,更准确。

2. 手动补全DLL快速解决

找到缺失的DLL后:

  • 从你的开发机的C:\Windows\System32(64位系统)或C:\Windows\SysWOW64(32位程序)里复制对应的DLL文件。
  • 把它放到dist文件夹的根目录(和你的Agent.exe同目录),再复制到目标PC试试,基本就能跑起来了。

3. 修改打包脚本,让py2exe自动包含依赖

如果你想一劳永逸,修改你的setup.py,把需要的DLL加入打包列表:

from distutils.core import setup
import py2exe
import psutil
import os

# 获取psutil底层pyd文件的路径
psutil_pyd_path = os.path.join(os.path.dirname(psutil.__file__), "_psutil_windows.pyd")
# 替换成你找到的缺失DLL的路径,比如vcruntime140.dll
missing_dll_path = "C:/Windows/System32/vcruntime140.dll"

setup(
    console=['Agent.py'],  # 如果是GUI程序就改成windows=['Agent.py']
    data_files=[
        ('.', [psutil_pyd_path, missing_dll_path])  # 把文件打包到exe同目录
    ],
    options={
        'py2exe': {
            'packages': ['psutil'],
            'includes': ['psutil._psutil_windows']  # 强制包含psutil的底层模块
        }
    }
)

重新打包后,DLL就会自动跟着dist文件夹走了。

4. 换用更省心的打包工具(推荐)

说实话,py2exe对现代Python库的依赖处理已经有点跟不上了,推荐换成PyInstaller——它会自动扫描所有依赖的DLL和模块,打包更彻底:

  • 先安装PyInstaller:pip install pyinstaller
  • 打包命令(单文件模式,方便分发):pyinstaller --onefile Agent.py
  • 生成的exe在dist文件夹里,直接复制到目标PC就能运行,基本不会碰到这种DLL缺失的问题。

额外注意点

  • 确保开发机和目标PC的系统位数一致(32位/64位),不然DLL不兼容会报错。
  • 如果缺失的是VC运行库,也可以让目标用户直接安装对应的「Microsoft Visual C Redistributable」包(比如2015-2022版本),这是更规范的做法,不用手动复制DLL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:06:44