Search code examples
pythonpython-sphinxread-the-docspython-poetry

Failed to import module itself with sphinx and poetry


What I want

https://github.com/ShortArrow/pyxlimg

I would like to publish the documentation below in the above project.

https://pyxlimg.readthedocs.io/en/latest/ https://readthedocs.org/projects/pyxlimg/

Error

/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/bin/python -m sphinx -T -b html -d _build/doctrees -D language=en . _build/html
Running Sphinx v3.5.2
loading translations [en]... done
making output directory... done
WARNING: html_static_path entry '_static' does not exist
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 3 source files that are out of date
updating environment: [new config] 3 added, 0 changed, 0 removed
reading sources... [ 33%] index
reading sources... [ 66%] modules
reading sources... [100%] pyxlimg

WARNING: autodoc: failed to import module 'xlimg' from module 'pyxlimg'; the following exception was raised:
No module named 'pyxlimg'
WARNING: autodoc: failed to import module 'pyxlimg'; the following exception was raised:
No module named 'pyxlimg'
looking for now-outdated files... none found
pickling environment... done
checking consistency... /home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/checkouts/latest/docs/modules.rst: WARNING: document isn't included in any toctree
done
preparing documents... done
writing output... [ 33%] index
writing output... [ 66%] modules
writing output... [100%] pyxlimg

generating indices... genindex done
writing additional pages... search done
copying static files... done
copying extra files... done
dumping search index in English (code: en)... done
dumping object inventory... done
build succeeded, 4 warnings.

The HTML pages are in _build/html.
Updating searchtools for Read the Docs search...
/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/bin/python -m sphinx -T -b readthedocssinglehtmllocalmedia -d _build/doctrees -D language=en . _build/localmedia
Running Sphinx v3.5.2
loading translations [en]... done
making output directory... done
WARNING: html_static_path entry '_static' does not exist
loading pickled environment... done
building [mo]: targets for 0 po files that are out of date
building [readthedocssinglehtmllocalmedia]: all documents
updating environment: 0 added, 1 changed, 0 removed
reading sources... [100%] pyxlimg

WARNING: autodoc: failed to import module 'xlimg' from module 'pyxlimg'; the following exception was raised:
No module named 'pyxlimg'
WARNING: autodoc: failed to import module 'pyxlimg'; the following exception was raised:
No module named 'pyxlimg'
looking for now-outdated files... none found
pickling environment... done
checking consistency... /home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/checkouts/latest/docs/modules.rst: WARNING: document isn't included in any toctree
done
preparing documents... done
assembling single document... done
writing... done
writing additional files... done
copying static files... done
copying extra files... done
dumping object inventory... done
build succeeded, 4 warnings.

The HTML page is in _build/localmedia.
Updating searchtools for Read the Docs search...

I tried

This will succeed on local machine.

.\.venv\Scripts\activate
sphinx-apidoc -f -o ./docs ./pyxlimg
sphinx-build -b html ./docs ./docs/_build

I think

I'm confused about what to do because the error cannot be reproduced in the local environment. I would be grateful if you could give me some advice.

Note

I am using the following command to tell readthedocs the configuration of "poetry".

poetry export --dev -f requirements.txt > requirements.txt

After adviced

I tried after @Steve Piercy message. It seems that the error messages have decreased somewhat. addsys.path.insert(0, os.path.abspath('..')),sys.path.insert(0, os.path.abspath('../pyxlimg')),sys.path.insert(0, os.path.abspath('../pyxlimg/xlimg'))to conf.py. I still get an error message.WARNING: autodoc: failed to import module 'xlimg' from module 'pyxlimg'

git clone --no-single-branch --depth 50 https://github.com/ShortArrow/pyxlimg.git .
git checkout --force origin/main
git clean -d -f -f
python3.8 -mvirtualenv --system-site-packages /home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest
/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/bin/python -m pip install --upgrade --no-cache-dir pip setuptools
/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/bin/python -m pip install --upgrade --no-cache-dir -I mock==1.0.1 pillow==5.4.1 alabaster>=0.7,<0.8,!=0.7.5 commonmark==0.8.1 recommonmark==0.5.0 sphinx sphinx-rtd-theme readthedocs-sphinx-ext<2.2
/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/bin/python -m pip install --exists-action=w --no-cache-dir -r requirements.txt
cat docs/conf.py
/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/bin/python -m sphinx -T -E -b html -d _build/doctrees -D language=en . _build/html
/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/bin/python -m sphinx -T -b readthedocssinglehtmllocalmedia -d _build/doctrees -D language=en . _build/localmedia
Running Sphinx v3.5.4
loading translations [en]... done
making output directory... done
WARNING: html_static_path entry '_static' does not exist
loading pickled environment... done
building [mo]: targets for 0 po files that are out of date
building [readthedocssinglehtmllocalmedia]: all documents
updating environment: 0 added, 1 changed, 0 removed
reading sources... [100%] pyxlimg

WARNING: autodoc: failed to import module 'xlimg' from module 'pyxlimg'; the following exception was raised:
Traceback (most recent call last):
  File "/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/lib/python3.8/site-packages/sphinx/ext/autodoc/importer.py", line 71, in import_module
    return importlib.import_module(modname)
  File "/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/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 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/checkouts/latest/pyxlimg/xlimg.py", line 58, in <module>
    class Sheet(Element):
  File "/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/checkouts/latest/pyxlimg/xlimg.py", line 66, in Sheet
    def __Pictures(self) -> list[Picture]:
TypeError: 'type' object is not subscriptable

looking for now-outdated files... none found
pickling environment... done
checking consistency... /home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/checkouts/latest/docs/modules.rst: WARNING: document isn't included in any toctree
done
preparing documents... done
assembling single document... done
writing... done
writing additional files... done
copying static files... done
copying extra files... done
dumping object inventory... done
build succeeded, 3 warnings.

The HTML page is in _build/localmedia.
Updating searchtools for Read the Docs search...

i think occurring error sphinx.ext.autodoc in reading pyxlimg.rst

WARNING: autodoc: failed to import module 'xlimg' from module 'pyxlimg'; the following exception was raised:
Traceback (most recent call last):
  File "/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/lib/python3.8/site-packages/sphinx/ext/autodoc/importer.py", line 71, in import_module
    return importlib.import_module(modname)
  File "/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/envs/latest/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 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/checkouts/latest/pyxlimg/xlimg.py", line 58, in <module>
    class Sheet(Element):
  File "/home/docs/checkouts/readthedocs.org/user_builds/pyxlimg/checkouts/latest/pyxlimg/xlimg.py", line 66, in Sheet
    def __Pictures(self) -> list[Picture]:
TypeError: 'type' object is not subscriptable

Solution

  • The module import error comes from the fact that autodoc needs your package to be installed. When using Poetry, you need to

    1. Add the docs-specific packages (sphinx, sphinx-rtd-theme, etc.) to the Poetry docs-group dependencies as explained in Poetry's documentation for group dependencies.
    2. Tell RTD in .readthedocs.yaml to use Poetry for the package management (solution from the Brownie Broke's blog post):
    build:
      os: ubuntu-22.04
      tools:
        python: "3.10"
      jobs:
        post_create_environment:
          - pip install poetry
          - poetry config virtualenvs.create false
        post_install:
          - poetry install --with docs