安装python-telegram-bot后提示No module named 'telegram.ext'
问题表现
运行Python代码时抛出如下异常:ModuleNotFoundError: No module named 'telegram.ext'; 'telegram' is not a package
已尝试执行的安装操作均无效:
pip install python-telegram-botpip3 install python-telegram-botpip install telegrampip3 install telegram
报错持续提示python-telegram-bot未提供telegram.ext模块,但文本编辑器的Python插件可正常识别当前环境中的telegram.ext包;切换到自行创建的虚拟环境通过命令行运行代码,问题仍然存在,目前有大量用户遇到同类问题暂无通用解决方案。
根本原因
该问题基本由三类原因导致:
- 命名冲突(最高发):运行代码的工作目录下存在自定义的
telegram.py文件,或名为telegram的文件夹,Python导入模块时会优先读取当前工作目录下的内容,不会加载系统安装的第三方库 - 包冲突:同时安装了
telegram和python-telegram-bot两个包,前者是和Telegram机器人开发完全无关的废弃库,会占用telegram模块命名空间,导致后者的子模块无法被正常导入 - 环境不匹配:pip安装依赖时对应的Python解释器,和实际运行代码调用的Python解释器不是同一个,编辑器识别的是安装了依赖的解释器环境,命令行运行时调用的是未正确安装依赖的环境
修复步骤
按顺序操作即可解决:
- 先彻底卸载所有存在冲突的包,执行以下命令:
pip uninstall -y telegram python-telegram-bot pip3 uninstall -y telegram python-telegram-bot
- 清理本地命名冲突项:检查代码存放的工作目录,删除所有自定义命名为
telegram.py的文件、以及名为telegram的自定义文件夹,这一步是绝大多数人踩坑的核心点 - 对齐运行环境和安装环境:
- 在代码最开头加一行代码
import sys; print(sys.executable),运行后打印出的路径就是你实际运行代码调用的Python解释器绝对路径 - 用该解释器直接调用pip安装依赖,避免环境错位:执行
<上一步打印的解释器绝对路径> -m pip install python-telegram-bot
注意:如果你用的是旧版同步写法的机器人代码,需要指定v13版本安装,命令改为<解释器路径> -m pip install python-telegram-bot==13.7,v20及以上版本为纯异步架构,旧代码无法兼容
- 在代码最开头加一行代码
- 后续安装依赖时永远不要执行
pip install telegram,该库和python-telegram-bot没有任何关联,只会引发冲突。
内容的提问来源于stack exchange,提问作者user19499885
相关产品推荐
相关产品推荐

