Read the Docs build information Build id: 145025 Project: icb-anndata Version: latest Commit: bcaff51a3db6f51764478e5e83367ebf8107f5a5 Date: 2018-09-26T03:13:22.965339Z State: finished Success: False [rtd-command-info] start-time: 2018-09-26T08:13:23.376764Z, end-time: 2018-09-26T08:13:23.383435Z, duration: 0, exit-code: 0 git remote set-url origin https://github.com/theislab/anndata.git [rtd-command-info] start-time: 2018-09-26T08:13:23.444849Z, end-time: 2018-09-26T08:13:23.734918Z, duration: 0, exit-code: 0 git fetch --tags --prune From https://github.com/theislab/anndata c8ab8f3..d0689ce 2d -> origin/2d b35a0e7..bcaff51 master -> origin/master [rtd-command-info] start-time: 2018-09-26T08:13:23.805293Z, end-time: 2018-09-26T08:13:23.814435Z, duration: 0, exit-code: 0 git checkout --force origin/master Previous HEAD position was b35a0e7... Merge pull request #58 from theislab/logging HEAD is now at bcaff51... renamed requires to requirements, updated setup [rtd-command-info] start-time: 2018-09-26T08:13:23.871387Z, end-time: 2018-09-26T08:13:23.880214Z, duration: 0, exit-code: 0 git clean -d -f -f [rtd-command-info] start-time: 2018-09-26T08:13:23.982174Z, end-time: 2018-09-26T08:13:23.988348Z, duration: 0, exit-code: 0 git branch -r origin/2d origin/HEAD -> origin/master origin/backed origin/logging origin/master [rtd-command-info] start-time: 2018-09-26T08:13:24.614325Z, end-time: 2018-09-26T08:13:27.252137Z, duration: 2, exit-code: 0 python3.6 -mvirtualenv --no-site-packages --no-download Using base prefix '/home/docs/.pyenv/versions/3.6.2' New python executable in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/bin/python3.6 Not overwriting existing python script /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/bin/python (you must use /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/bin/python3.6) Installing setuptools, pip, wheel...done. [rtd-command-info] start-time: 2018-09-26T08:13:27.312726Z, end-time: 2018-09-26T08:13:29.567234Z, duration: 2, exit-code: 0 python pip install --upgrade --cache-dir /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/.cache/pip Pygments==2.2.0 setuptools<40 docutils==0.13.1 mock==1.0.1 pillow==2.6.1 alabaster>=0.7,<0.8,!=0.7.5 commonmark==0.5.4 recommonmark==0.4.0 sphinx<1.8 sphinx-rtd-theme<0.5 readthedocs-sphinx-ext<0.6 Requirement already up-to-date: Pygments==2.2.0 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: setuptools<40 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: docutils==0.13.1 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: mock==1.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: pillow==2.6.1 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: alabaster!=0.7.5,<0.8,>=0.7 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: commonmark==0.5.4 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: recommonmark==0.4.0 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: sphinx<1.8 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: sphinx-rtd-theme<0.5 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: readthedocs-sphinx-ext<0.6 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages Requirement already up-to-date: snowballstemmer>=1.1 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from sphinx<1.8) Requirement already up-to-date: babel!=2.0,>=1.3 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from sphinx<1.8) Requirement already up-to-date: sphinxcontrib-websupport in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from sphinx<1.8) Requirement already up-to-date: requests>=2.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from sphinx<1.8) Requirement already up-to-date: Jinja2>=2.3 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from sphinx<1.8) Requirement already up-to-date: imagesize in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from sphinx<1.8) Requirement already up-to-date: packaging in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from sphinx<1.8) Requirement already up-to-date: six>=1.5 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from sphinx<1.8) Requirement already up-to-date: pytz>=0a in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from babel!=2.0,>=1.3->sphinx<1.8) Requirement already up-to-date: certifi>=2017.4.17 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from requests>=2.0.0->sphinx<1.8) Requirement already up-to-date: urllib3<1.24,>=1.21.1 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from requests>=2.0.0->sphinx<1.8) Requirement already up-to-date: idna<2.8,>=2.5 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from requests>=2.0.0->sphinx<1.8) Requirement already up-to-date: chardet<3.1.0,>=3.0.2 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from requests>=2.0.0->sphinx<1.8) Requirement already up-to-date: MarkupSafe>=0.23 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from Jinja2>=2.3->sphinx<1.8) Requirement already up-to-date: pyparsing>=2.0.2 in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from packaging->sphinx<1.8) You are using pip version 9.0.3, however version 18.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command. [rtd-command-info] start-time: 2018-09-26T08:13:29.630447Z, end-time: 2018-09-26T08:13:44.704501Z, duration: 15, exit-code: 0 python pip install --exists-action=w --cache-dir /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/.cache/pip -r /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/checkouts/latest/requirements.txt Collecting pandas>=0.21.0 (from -r /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/checkouts/latest/requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/e1/d8/feeb346d41f181e83fba45224ab14a8d8af019b48af742e047f3845d8cff/pandas-0.23.4-cp36-cp36m-manylinux1_x86_64.whl (8.9MB) Collecting numpy~=1.14.0 (from -r /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/checkouts/latest/requirements.txt (line 2)) Downloading https://files.pythonhosted.org/packages/e5/c4/395ebb218053ba44d64935b3729bc88241ec279915e72100c5979db10945/numpy-1.14.6-cp36-cp36m-manylinux1_x86_64.whl (13.8MB) Collecting scipy~=1.0 (from -r /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/checkouts/latest/requirements.txt (line 3)) Downloading https://files.pythonhosted.org/packages/a8/0b/f163da98d3a01b3e0ef1cab8dd2123c34aee2bafbb1c5bffa354cc8a1730/scipy-1.1.0-cp36-cp36m-manylinux1_x86_64.whl (31.2MB) Collecting h5py (from -r /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/checkouts/latest/requirements.txt (line 4)) Downloading https://files.pythonhosted.org/packages/8e/cb/726134109e7bd71d98d1fcc717ffe051767aac42ede0e7326fd1787e5d64/h5py-2.8.0-cp36-cp36m-manylinux1_x86_64.whl (2.8MB) Collecting natsort (from -r /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/checkouts/latest/requirements.txt (line 5)) Downloading https://files.pythonhosted.org/packages/e3/31/b937f858addee2e1a62f15842f0f3f07e9277aa87fb67fe9b9e28ac90d50/natsort-5.4.1-py2.py3-none-any.whl Requirement already satisfied: pytz>=2011k in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from pandas>=0.21.0->-r /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/checkouts/latest/requirements.txt (line 1)) Collecting python-dateutil>=2.5.0 (from pandas>=0.21.0->-r /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/checkouts/latest/requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/cf/f5/af2b09c957ace60dcfac112b669c45c8c97e32f94aa8b56da4c6d1682825/python_dateutil-2.7.3-py2.py3-none-any.whl (211kB) Requirement already satisfied: six in /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages (from h5py->-r /home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/checkouts/latest/requirements.txt (line 4)) Installing collected packages: numpy, python-dateutil, pandas, scipy, h5py, natsort Successfully installed h5py-2.8.0 natsort-5.4.1 numpy-1.14.6 pandas-0.23.4 python-dateutil-2.7.3 scipy-1.1.0 You are using pip version 9.0.3, however version 18.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command. [rtd-command-info] start-time: 2018-09-26T08:13:45.332062Z, end-time: 2018-09-26T08:13:45.393532Z, duration: 0, exit-code: 0 cat docs/conf.py import os import sys import time import inspect from pathlib import Path, PurePosixPath import logging HERE = Path(__file__).parent sys.path.insert(0, str(HERE / '..')) import anndata logger = logging.getLogger(__name__) for generated in HERE.glob('anndata.*.rst'): generated.unlink() # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.doctest', 'sphinx.ext.coverage', 'sphinx.ext.mathjax', 'sphinx.ext.napoleon', 'sphinx.ext.autosummary', # 'plot_generator', # 'plot_directive', 'sphinx_autodoc_typehints', # needs to be after napoleon # 'ipython_directive', # 'ipython_console_highlighting', ] # Generate the API documentation when building autosummary_generate = True autodoc_mock_imports = ['_tkinter'] # why this? autodoc_member_order = 'bysource' #autodoc_default_flags = ['members'] napoleon_use_param = True intersphinx_mapping = dict( python=('https://docs.python.org/3', None), h5py=('http://docs.h5py.org/en/latest/', None) ) templates_path = ['_templates'] source_suffix = '.rst' master_doc = 'index' project = 'anndata' copyright = '{}, Alex Wolf, Philipp Angerer, Sergei Rybakov'.format(time.strftime("%Y")) author = 'Alex Wolf, Philipp Angerer, Sergei Rybakov' version = anndata.__version__.replace('.dirty', '') release = version exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] pygments_style = 'sphinx' todo_include_todos = False # -- Options for HTML output ---------------------------------------------- html_theme = 'sphinx_rtd_theme' html_theme_options = { 'navigation_depth': 2, } html_context = { 'display_github': True, # Integrate GitHub 'github_user': 'theislab', # Username 'github_repo': 'anndata', # Repo name 'github_version': 'master', # Version 'conf_py_path': '/docs/', # Path in the checkout to the docs root 'css_files': [ # Additional CSS '_static/css/override.css', ], } if 'READTHEDOCS' in os.environ: # For some reason, RTD doesn’t insert their stuff anymore once we add custom CSS files. html_context['css_files'].insert(0, 'https://media.readthedocs.org/css/sphinx_rtd_theme.css') html_static_path = ['_static'] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. htmlhelp_basename = 'anndatadoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'anndata.tex', 'anndata Documentation', 'Alex Wolf, Philipp Angerer', 'manual'), ] # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'anndata', 'anndata Documentation', [author], 1) ] # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'anndata', 'anndata Documentation', author, 'anndata', 'One line description of project.', 'Miscellaneous'), ] # -- GitHub links --------------------------------------------------------- def get_obj_module(qualname): """Get a module/class/attribute and its original module by qualname""" modname = qualname classname = None attrname = None while modname not in sys.modules: attrname = classname modname, classname = modname.rsplit('.', 1) # retrieve object and find original module name if classname: cls = getattr(sys.modules[modname], classname) modname = cls.__module__ obj = getattr(cls, attrname) if attrname else cls else: obj = None return obj, sys.modules[modname] def get_linenos(obj): """Get an object’s line numbers""" try: lines, start = inspect.getsourcelines(obj) except TypeError: return None, None else: return start, start + len(lines) - 1 project_dir = Path(__file__).parent.parent # project/docs/conf.py/../.. → project/ github_url1 = 'https://github.com/{github_user}/{github_repo}/tree/{github_version}'.format_map(html_context) github_url2 = 'https://github.com/theislab/anndata/tree/master' def modurl(qualname): """Get the full GitHub URL for some object’s qualname.""" obj, module = get_obj_module(qualname) github_url = github_url1 try: path = PurePosixPath(Path(module.__file__).resolve().relative_to(project_dir)) except ValueError: # trying to document something from another package github_url = github_url2 path = '/'.join(module.__file__.split('/')[-2:]) start, end = get_linenos(obj) fragment = '#L{}-L{}'.format(start, end) if start and end else '' return '{}/{}{}'.format(github_url, path, fragment) # html_context doesn’t apply to autosummary templates ☹ # and there’s no way to insert filters into those templates # so we have to modify the default filters from jinja2.defaults import DEFAULT_FILTERS DEFAULT_FILTERS['modurl'] = modurl # -- Prettier Param docs -------------------------------------------- from typing import Dict, List, Tuple from docutils import nodes from sphinx import addnodes from sphinx.domains.python import PyTypedField, PyObject from sphinx.environment import BuildEnvironment class PrettyTypedField(PyTypedField): list_type = nodes.definition_list def make_field( self, types: Dict[str, List[nodes.Node]], domain: str, items: Tuple[str, List[nodes.inline]], env: BuildEnvironment = None ) -> nodes.field: def makerefs(rolename, name, node): return self.make_xrefs(rolename, domain, name, node, env=env) def handle_item(fieldarg: str, content: List[nodes.inline]) -> nodes.definition_list_item: head = nodes.term() head += makerefs(self.rolename, fieldarg, addnodes.literal_strong) fieldtype = types.pop(fieldarg, None) if fieldtype is not None: head += nodes.Text(' : ') if len(fieldtype) == 1 and isinstance(fieldtype[0], nodes.Text): typename = ''.join(n.astext() for n in fieldtype) head += makerefs(self.typerolename, typename, addnodes.literal_emphasis) else: head += fieldtype body_content = nodes.paragraph('', '', *content) body = nodes.definition('', body_content) return nodes.definition_list_item('', head, body) fieldname = nodes.field_name('', self.label) if len(items) == 1 and self.can_collapse: fieldarg, content = items[0] bodynode = handle_item(fieldarg, content) else: bodynode = self.list_type() for fieldarg, content in items: bodynode += handle_item(fieldarg, content) fieldbody = nodes.field_body('', bodynode) return nodes.field('', fieldname, fieldbody) # replace matching field types with ours PyObject.doc_field_types = [ PrettyTypedField( ft.name, names=ft.names, typenames=ft.typenames, label=ft.label, rolename=ft.rolename, typerolename=ft.typerolename, can_collapse=ft.can_collapse, ) if isinstance(ft, PyTypedField) else ft for ft in PyObject.doc_field_types ] ########################################################################### # auto-created readthedocs.org specific configuration # ########################################################################### # # The following code was added during an automated build on readthedocs.org # It is auto created and injected for every build. The result is based on the # conf.py.tmpl file found in the readthedocs.org codebase: # https://github.com/rtfd/readthedocs.org/blob/master/readthedocs/doc_builder/templates/doc_builder/conf.py.tmpl # import sys import os.path from six import string_types from sphinx import version_info # Get suffix for proper linking to GitHub # This is deprecated in Sphinx 1.3+, # as each page can have its own suffix if globals().get('source_suffix', False): if isinstance(source_suffix, string_types): SUFFIX = source_suffix else: SUFFIX = source_suffix[0] else: SUFFIX = '.rst' # Add RTD Static Path. Add to the end because it overwrites previous files. if not 'html_static_path' in globals(): html_static_path = [] if os.path.exists('_static'): html_static_path.append('_static') html_static_path.append('/home/docs/checkouts/readthedocs.org/readthedocs/templates/sphinx/_static') # Add RTD Theme only if they aren't overriding it already using_rtd_theme = False if 'html_theme' in globals(): if html_theme in ['default']: # Allow people to bail with a hack of having an html_style if not 'html_style' in globals(): import sphinx_rtd_theme html_theme = 'sphinx_rtd_theme' html_style = None html_theme_options = {} if 'html_theme_path' in globals(): html_theme_path.append(sphinx_rtd_theme.get_html_theme_path()) else: html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] using_rtd_theme = True else: import sphinx_rtd_theme html_theme = 'sphinx_rtd_theme' html_style = None html_theme_options = {} if 'html_theme_path' in globals(): html_theme_path.append(sphinx_rtd_theme.get_html_theme_path()) else: html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] using_rtd_theme = True if globals().get('websupport2_base_url', False): websupport2_base_url = 'https://readthedocs.com/websupport' websupport2_static_url = 'https://media.readthedocs.com/' #Add project information to the template context. context = { 'using_theme': using_rtd_theme, 'html_theme': html_theme, 'current_version': "latest", 'version_slug': "latest", 'MEDIA_URL': "https://media.readthedocs.com/media/", 'STATIC_URL': "https://media.readthedocs.com/", 'PRODUCTION_DOMAIN': "readthedocs.com", 'versions': [ ("latest", "/en/latest/"), ("stable", "/en/stable/"), ], 'downloads': [ ], 'subprojects': [ ], 'slug': 'icb-anndata', 'name': u'anndata', 'rtd_language': u'en', 'programming_language': u'py', 'canonical_url': 'https://icb-anndata.readthedocs-hosted.com/en/latest/', 'analytics_code': 'None', 'single_version': False, 'conf_py_path': '/docs/', 'api_host': 'https://readthedocs.com', 'github_user': 'theislab', 'github_repo': 'anndata', 'github_version': 'master', 'display_github': True, 'bitbucket_user': 'None', 'bitbucket_repo': 'None', 'bitbucket_version': 'master', 'display_bitbucket': False, 'gitlab_user': 'None', 'gitlab_repo': 'None', 'gitlab_version': 'master', 'display_gitlab': False, 'READTHEDOCS': True, 'using_theme': (html_theme == "default"), 'new_theme': (html_theme == "sphinx_rtd_theme"), 'source_suffix': SUFFIX, 'ad_free': False, 'user_analytics_code': '', 'global_analytics_code': 'UA-17997319-2', 'commit': 'bcaff51a', } if 'html_context' in globals(): html_context.update(context) else: html_context = context # Add custom RTD extension if 'extensions' in globals(): # Insert at the beginning because it can interfere # with other extensions. # See https://github.com/rtfd/readthedocs.org/pull/4054 extensions.insert(0, "readthedocs_ext.readthedocs") else: extensions = ["readthedocs_ext.readthedocs"] [rtd-command-info] start-time: 2018-09-26T08:13:45.454890Z, end-time: 2018-09-26T08:13:47.489395Z, duration: 2, exit-code: 2 python sphinx-build -T -E -b readthedocs -d _build/doctrees-readthedocs -D language=en . _build/html Running Sphinx v1.7.9 loading translations [en]... done Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages/sphinx/registry.py", line 315, in load_extension mod = __import__(extname, None, None, ['setup']) ModuleNotFoundError: No module named 'sphinx_autodoc_typehints' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages/sphinx/cmdline.py", line 303, in main args.warningiserror, args.tags, args.verbosity, args.jobs) File "/home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages/sphinx/application.py", line 191, in __init__ self.setup_extension(extension) File "/home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages/sphinx/application.py", line 411, in setup_extension self.registry.load_extension(self, extname) File "/home/docs/checkouts/readthedocs.org/user_builds/icb-anndata/envs/latest/lib/python3.6/site-packages/sphinx/registry.py", line 318, in load_extension raise ExtensionError(__('Could not import extension %s') % extname, err) sphinx.errors.ExtensionError: Could not import extension sphinx_autodoc_typehints (exception: No module named 'sphinx_autodoc_typehints') Extension error: Could not import extension sphinx_autodoc_typehints (exception: No module named 'sphinx_autodoc_typehints')