python 无法加载 pyd 二进制模块的解决办法
>>> import socket
Import Error: DLL load failed while import _socket: 参数错误
在没有打过补丁的 win7、2008 系统中,可能会出现上面这个报错,不止是 socket 模块,所有 pyd 二进制模块都无法加载。
问题根源是 python 通过 LoadLibraryExW
加载 pyd 模块,并传入了LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR
(即 0x1100
)flag 参数,微软 msdn 文档说,这两个 flag 需要安装 KB2533623 补丁才能支持。
然后,你应该会很自然的去找 KB2533623 补丁,却发现无法下载,微软官方下载页竟然报了 404 错误。
继续搜索发现,微软废弃了 KB2533623 补丁,有两个补丁可以替代:
- KB4457144:这是个累积补丁,体积有 200 多 MB,不太好装
- KB3063858:这个小巧的补丁也能解决,推荐用这个
至于下载地址,我也附上吧。
- win7 x86:https://download.microsoft.com/download/C/9/6/C96CD606-3E05-4E1C-B201-51211AE80B1E/Windows6.1-KB3063858-x86.msu
- win7 x64:https://download.microsoft.com/download/0/8/E/08E0386B-F6AF-4651-8D1B-C0A95D2731F0/Windows6.1-KB3063858-x64.msu
- 2008 R2:https://download.microsoft.com/download/D/0/7/D0757054-F917-4728-935B-200AEAFE0308/Windows6.1-KB3063858-x64.msu
近期评论