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

Python 3.8中导入serial模块后无法访问serial.tools的问题求助

解决AttributeError: module 'serial' has no attribute 'tools'的问题

看起来你遇到的问题核心在于模块命名空间冲突+子模块未被显式导入,结合你的输出里<module 'serial' (namespace)>这个提示,咱们一步步来解决:

问题诊断

  1. 你之前安装过同名的serial包,卸载后可能残留了命名空间文件,导致Python把serial识别成了一个空的命名空间模块,而非pyserial提供的完整功能模块。
  2. 即使pkgutil能遍历到tools子模块的路径,但Python不会自动把子模块导入到主模块的命名空间里,所以直接访问serial.tools会报错。

解决方案步骤

1. 彻底清理并重新安装正确的包

首先确保你用的是提供serial.tools的pyserial包,而非之前的serial包:

  • 先彻底卸载残留的serial相关包:
    pip uninstall -y serial pyserial
    
  • 重新安装官方的pyserial:
    pip install pyserial
    

2. 检查site-packages目录(可选)

打开Python的site-packages路径(比如你的C:/Users/ratchet/AppData/Local/Programs/Python/Python38-32/Lib/site-packages),确认:

  • 存在serial文件夹,且里面有tools子文件夹(包含__init__.py等完整文件)
  • 没有残留的空serial命名空间文件夹(比如只有空__init__.py的文件夹)

3. 修改代码,显式导入子模块

在你的代码里,需要先显式导入serial.tools,才能在主模块的命名空间里访问它。修改后的代码如下:

import os
import sys
import serial
import pkgutil
# 显式导入tools子模块,让它加入serial模块的命名空间
import serial.tools

package = serial
for importer, modname, ispkg in pkgutil.iter_modules(package.__path__):
    print("Found submodule %s (is a package: %s)" % (modname, ispkg))
print(serial)
print(serial.tools)
os.system("pause")

或者你也可以用另一种导入方式直接使用:

from serial import tools
print(tools)

这样修改后,你应该就能正常访问serial.tools了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:48