升级importlib_meta至8.5.0后Django自动重载触发TypeError错误
Django启动报错:TypeError: unhashable type: 'types.SimpleNamespace'
问题场景
将importlib_metadata从8.4.0版本升级至2024年9月11日发布的8.5.0版本后,执行python manage.py runserver启动Django开发服务器时触发如下错误。
错误日志
File "/app/manage.py", line 17, in main execute_from_command_line(sys.argv) File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 436, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 413, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 75, in execute super().execute(*args, **options) File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 459, in execute output = self.handle(*args, **options) File "/usr/local/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 112, in handle self.run(**options) File "/usr/local/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 119, in run autoreload.run_with_reloader(self.inner_run, **options) File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 671, in run_with_reloader start_django(reloader, main_func, *args, **kwargs) File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 660, in start_django reloader.run(django_main_thread) File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 344, in run self.run_loop() File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 350, in run_loop next(ticker) File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 390, in tick for filepath, mtime in self.snapshot_files(): File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 411, in snapshot_files for file in self.watched_files(): File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 304, in watched_files yield from iter_all_python_module_files() File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 120, in iter_all_python_module_files return iter_modules_and_files(modules, frozenset(_error_files)) TypeError: unhashable type: 'types.SimpleNamespace'
问题根源
该错误源于importlib_metadata 8.5.0版本中的特定代码提交,安装该提交的前一版本可临时规避问题,执行命令:
pip install git+https://github.com/python/importlib_metadata@d968f6270d55f27a10491344a22e9e0fd77b5583
解决方案
目前通过升级zipp依赖至3.20.2版本即可彻底解决该问题,执行以下命令:
pip install --upgrade zipp==3.20.2
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

