部署Django应用遇ImportError:无法从typing_extensions导入ParamSpec
部署Django应用时typing_extensions相关ImportError问题解决
未更新或添加任何依赖库的情况下,部署Django Web应用时触发以下错误:
Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 118, in django_setup django.setup() File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 91, in populate app_config = AppConfig.create(entry) File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 116, in create mod = import_module(mod_path) File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/usr/local/lib/python3.7/site-packages/channels/apps.py", line 4, in <module> import daphne.server File "/usr/local/lib/python3.7/site-packages/daphne/server.py", line 5, in <module> from twisted.internet import asyncioreactor # isort:skip File "/usr/local/lib/python3.7/site-packages/twisted/internet/asyncioreactor.py", line 19, in <module> from twisted.internet.posixbase import ( File "/usr/local/lib/python3.7/site-packages/twisted/internet/posixbase.py", line 16, in <module> from twisted.internet import error, tcp, udp File "/usr/local/lib/python3.7/site-packages/twisted/internet/tcp.py", line 99, in <module> from twisted.internet import abstract, address, base, error, fdesc, main File "/usr/local/lib/python3.7/site-packages/twisted/internet/base.py", line 34, in <module> from twisted.internet import abstract, defer, error, fdesc, main, threads File "/usr/local/lib/python3.7/site-packages/twisted/internet/defer.py", line 42, in <module> from typing_extensions import Literal, ParamSpec, Protocol ImportError: cannot import name 'ParamSpec' from 'typing_extensions' (/usr/local/lib/python3.7/site-packages/typing_extensions.py)
问题原因
ParamSpec是typing_extensions 4.0.0版本才新增的类型注解,而Python 3.7环境中安装的typing_extensions版本过低。即使你未手动更新依赖,部署环境中的Twisted库可能被自动升级到了需要ParamSpec的版本(如Twisted 22.10.0及以上),从而引发兼容性冲突。
解决方法
方案一:升级typing_extensions到兼容Python 3.7的最高版本
- 查看当前版本:
pip show typing_extensions - 安装适配Python 3.7的版本(typing_extensions 4.7.1是支持Python 3.7的最后一个版本):
pip install typing_extensions==4.7.1
- 查看当前版本:
方案二:锁定Twisted到不依赖ParamSpec的旧版本
安装Twisted 22.10.0之前的版本:pip install twisted<22.10.0
完成安装后重新启动Django应用,验证错误是否消除。
内容的提问来源于stack exchange,提问作者Stuti Verma
相关产品推荐
相关产品推荐

