如何解决Python-pptx在Python3.11中的导入/兼容性错误?
解决python-pptx在Python3.11中AttributeError问题的最简单方法
方法一:使用兼容的Python版本(最推荐)
直接将Python版本降级到3.10或更低版本,因为python-pptx官方目前仅支持到Python3.10,这是最稳定且无需修改代码的方案。你可以通过版本管理工具(如pyenv)快速切换版本,或者重新安装对应版本的Python。
方法二:临时修改python-pptx的兼容模块
如果不想更换Python版本,可手动修改python-pptx的兼容文件:
- 找到报错的文件路径:
/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pptx/compat/__init__.py - 打开文件后,将所有从
collections直接引用的抽象基类,改为从collections.abc引用:- 例如将
Container = collections.Container改为Container = collections.abc.Container - 同时检查并修改其他类似行,比如
Mapping = collections.Mapping改为Mapping = collections.abc.Mapping,Iterable = collections.Iterable改为Iterable = collections.abc.Iterable等
- 例如将
问题背景
运行以下脚本时出现错误:
from pptx import Presentation prs = Presentation() print('finish')
错误信息:
from pptx import Presentation File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pptx/__init__.py", line 14, in <module> from pptx.api import Presentation # noqa ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pptx/api.py", line 15, in <module> from .package import Package File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pptx/package.py", line 6, in <module> from pptx.opc.package import OpcPackage File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pptx/opc/package.py", line 11, in <module> from pptx.compat import is_string, Mapping File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pptx/compat/__init__.py", line 14, in <module> Container = collections.Container ^^^^^^^^^^^^^^^^^^^^^ AttributeError: module 'collections' has no attribute 'Container'
已知该问题是由于python-pptx暂不支持Python3.11导致。
内容的提问来源于stack exchange,提问作者plsHelpmyCoding
相关产品推荐
相关产品推荐

