mkdocs-material: Blog plugin crashes on Python 3.8 (Netlify)
Context
I host my mkdocs site on Netlify, which currently uses Python 3.8
Bug description
When enabling the blog plugin on Python 3.8, mkdocs build
fails with TypeError: 'ABCMeta' object is not subscriptable
.
Full output below:
Traceback (most recent call last):
File "/Users/davidy/.pyenv/versions/mkdocs-blog/bin/mkdocs", line 8, in <module>
sys.exit(cli())
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/mkdocs/__main__.py", line 283, in build_command
cfg = config.load_config(**kwargs)
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/mkdocs/config/base.py", line 378, in load_config
errors, warnings = cfg.validate()
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/mkdocs/config/base.py", line 230, in validate
run_failed, run_warnings = self._validate()
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/mkdocs/config/base.py", line 188, in _validate
self[key] = config_option.validate(value)
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/mkdocs/config/config_options.py", line 182, in validate
return self.run_validation(value)
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/mkdocs/config/config_options.py", line 1064, in run_validation
self.load_plugin_with_namespace(name, cfg)
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/mkdocs/config/config_options.py", line 1100, in load_plugin_with_namespace
return (name, self.load_plugin(name, config))
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/mkdocs/config/config_options.py", line 1118, in load_plugin
plugin_cls = self.installed_plugins[name].load()
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/importlib_metadata/__init__.py", line 209, in load
module = import_module(match.group('module'))
File "/Users/davidy/.pyenv/versions/3.8.18/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 843, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/material/plugins/blog/plugin.py", line 44, in <module>
from .structure import Archive, Category, Excerpt, Post, View
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/material/plugins/blog/structure/__init__.py", line 40, in <module>
from .config import PostConfig
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/material/plugins/blog/structure/config.py", line 24, in <module>
from .options import PostDate
File "/Users/davidy/.pyenv/versions/3.8.18/envs/mkdocs-blog/lib/python3.8/site-packages/material/plugins/blog/structure/options.py", line 30, in <module>
class DateDict(UserDict[str, datetime]):
TypeError: 'ABCMeta' object is not subscriptable
Related links
Reproduction
Steps to reproduce
- Create a fresh python 3.8 env using
pyenv install 3.8
- Install mkdocs with
pip install mkdocs-material
- Create the absolute minimal site with only the blog plugin enabled (see reproduction)
- Uncomment the
blog
section underplugins:
(the info plugin wouldn’t work while it was enabled, since mkdocs would error) - Run
mkdocs build
and observe the error
Browser
No response
Before submitting
- I have read and followed the bug reporting guidelines.
- I have attached links to the documentation, and possibly related issues and discussions.
- I assure that I have removed all customizations before submitting this bug report.
- I have attached a .zip file with a minimal reproduction.
About this issue
- Original URL
- State: closed
- Created 10 months ago
- Comments: 21 (21 by maintainers)
Kudos for this attitude in general and supporting such a wide range of versions (3.7+ IIRC), even when it is not convenient or nice. From a user’s perspective, it really helps, e.g. some of our machines still run Debian bullseye and FreeBSD with Python 3.9 and it feels good to know that we can continue installing new versions from PyPI for a while and don’t have to rush OS upgrades too much.