Ubuntu 20.04下Python3.8导入Arcade库报TypeError问题
问题环境
- 操作系统:Ubuntu 20.04
- Python 版本:3.8.10
问题表现
执行安装命令:
pip install arcade
命令执行完成无报错,但后续运行Arcade示例代码、或是在Python交互命令行执行import arcade导入库时,均会触发错误,完整报错信息如下:
>>> import arcade Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/brian/.local/lib/python3.8/site-packages/arcade/__init__.py", line 250, in <module> from .joysticks import get_game_controllers File "/home/brian/.local/lib/python3.8/site-packages/arcade/joysticks.py", line 1, in <module> import pyglet.input File "/home/brian/.local/lib/python3.8/site-packages/pyglet/input/__init__.py", line 179, in <module> from .evdev import get_devices as evdev_get_devices File "/home/brian/.local/lib/python3.8/site-packages/pyglet/input/evdev.py", line 509, in <module> class EvdevControllerManager(ControllerManager, XlibSelectDevice): File "/home/brian/.local/lib/python3.8/site-packages/pyglet/input/evdev.py", line 583, in EvdevControllerManager def get_controllers(self) -> list[Controller]: TypeError: 'type' object is not subscriptable
错误原因
报错由依赖版本不兼容导致:
报错触发点是类型标注list[Controller],该内置类型下标的泛型写法从Python 3.9版本才开始支持,Python 3.8及更早版本无法解析该语法,因此抛出类型错误。执行pip install arcade时,pip默认拉取了最新版的pyglet(Arcade的核心依赖),该版本pyglet不再兼容Python 3.8,才触发了导入失败。
可行解决方案
二选一即可:
- 保留现有Python 3.8环境,降级pyglet到兼容版本,执行命令:
pip install pyglet==2.0.10
降级完成后重新导入Arcade即可正常使用,该版本pyglet的类型标注适配Python 3.8语法规则,不会触发同类报错。
- 升级本地Python版本到3.9或更高版本,从根源适配新版Arcade、pyglet的语法要求,后续也不会遇到其他同类低版本兼容问题。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

