How do I tell ReadTheDocs to build my project packages from a sub-directory?

586 views Asked by At

I have a repository that contains three python packages: a main package, and two addon packages, with shared documentation. Each project is in its own directory, with its own setup.py, as so:

  • Repository
    • Main Project
      • setup.py
    • Addon One
      • setup.py
    • Addon Two
      • setup.py
    • Documentation
      • RST files, RTD conf, etc.

Previously, I was using setuptools.find_packages() to build my packages, but was having issues with the contents of the packages bleeding together, as they shared namespaces. So I switched to specifying the packages I wanted to build, such as

packages=["Main Package"]

However, this broke my ReadTheDocs auto-build, where I had specified

- method: setuptools
  path: Main Project

in .readthedocs.yml, with RTD now complaining my package (inside the Main Project directory) doesn't exist, as it attempts to build it.

In my project, I use a script to build the packages, where I move into each directory, run its setup, then move out. Works fine, my packages and documentation all build locally. However, it looks like RTD is only using the defined path to prepend my setup.py script, and therefore not finding the source package as the working directory is the parent directory (but I could be wrong!).

I've read through the documentation, including https://github.com/readthedocs/readthedocs.org/issues/4354 where the feature was originally added, but I have not been able to find a solution myself yet.

How can I tell RTD to change directory before building the packages, or is there an alternative approach that will support my repo structure?

Repository in question is here.

1

There are 1 answers

0
Neil Bradley On

I found a solution:

I changed my local build script to use the root project directory, as per-RTD. I then added the directive package_dir={"": "[directory]"} to the setuptools.setup() calls in each project's setup.py.