脚本目录里放了一个自己写的 queue.py,跑起来报 AttributeError: module 'queue' has no attribute 'Queue'。同一份代码在同事机器上完全正常。乍看像缓存或者权限的锅,追下去往往不是。

python -c "import queue; print(queue.__file__)"
python -c "import sys; print(sys.path[:3])"

追下去是这么回事:Python 启动时把脚本所在目录放在 sys.path 最前面,同名的本地文件会盖掉标准库。标准库里很多模块名很普通,随手建个文件就能撞上。

「模块名遮蔽标准库」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

具体做法是,打印 sys.path 和 queue.__file__ 确认导到的是哪个文件;把本地文件改名 比如 my_queue.py 或者挪进包目录加前缀;删掉目录里残留的 __pycache__ 避免旧字节码还在;换个干净目录用 python -c 再 import 一次确认。

验收就看一点,queue.__file__ 指向 Python 安装目录下的 queue.py 不再落在项目根目录。

作者 9823189