Python中cannot import name 'ForkingMixIn'错误如何解决

from socketserver import ForkingMixIn 报错 cannot import name 'ForkingMixIn'
python 版本是 3.6 的


Python中cannot import name 'ForkingMixIn'错误如何解决
5 回复

提问之前请自己先 Google。

Check if OS can fork before importing ForkingMixIn since Python 3.6 will no longer define that when it is not available on the operating system (python/cpython@aadff9b) and ImportError: cannot import name ‘ForkingMixIn’ will occur.

https://github.com/pallets/werkzeug/pull/999


这个错误通常是因为Python标准库中SocketServer模块的命名问题。在Python 3中,SocketServer模块已经重命名为socketserver(全小写)。

解决方案:

  1. 检查导入语句

    • 错误写法:from SocketServer import ForkingMixIn
    • 正确写法:from socketserver import ForkingMixIn
  2. 完整示例代码

# 正确导入方式
from socketserver import ForkingMixIn, TCPServer, BaseRequestHandler
import socket
import threading

class MyHandler(BaseRequestHandler):
    def handle(self):
        data = self.request.recv(1024)
        print(f"Received: {data.decode()}")
        self.request.sendall(b"Message received")

class MyServer(ForkingMixIn, TCPServer):
    pass

# 创建服务器
server = MyServer(('localhost', 9999), MyHandler)
print("Server starting...")
server.serve_forever()
  1. 如果代码中混用了新旧名称
# 兼容性写法
try:
    from socketserver import ForkingMixIn  # Python 3
except ImportError:
    from SocketServer import ForkingMixIn  # Python 2(已弃用)

根本原因

  • Python 2中使用SocketServer(驼峰命名)
  • Python 3中改为socketserver(全小写)
  • 这个错误通常发生在将Python 2代码迁移到Python 3时

检查步骤

  1. 确认你的Python版本:python --version
  2. 全局搜索代码中的SocketServer并替换为socketserver
  3. 确保所有相关导入都使用小写形式

如果是从第三方库报错,可能需要更新该库到支持Python 3的版本。

一句话建议:统一使用Python 3的socketserver模块命名。

当然 Google 过了,有人说这是 Werkzeug 旧版本的 bug,需要更新到最新版本。然而我更新了,并没有用 。另外我在 Ubuntu 上用 python3.5 和 3.6 都试过了,没问题。

好吧 知道了 谢谢回复

你 google 过了也没搞明白为什么,只是照着别人的步骤去做而已

回到顶部