Как мне указать ReadTheDocs создавать пакеты моего проекта из подкаталога?

#setup.py #read-the-docs

#setup.py #read-the-docs

Вопрос:

У меня есть репозиторий, содержащий три пакета python: основной пакет и два дополнительных пакета с общей документацией. Каждый проект находится в своем собственном каталоге со своим собственным setup.py , как так:

  • Репозиторий
    • Основной проект
      • setup.py
    • Аддон один
      • setup.py
    • Дополнение два
      • setup.py
    • Документация
      • ПЕРВЫЕ файлы, RTD conf и т. Д.

Ранее я использовал setuptools.find_packages() для сборки своих пакетов, но у меня были проблемы с объединением содержимого пакетов, поскольку они разделяли пространства имен. Поэтому я переключился на указание пакетов, которые я хотел создать, например

packages=["Main Package"]

Однако это нарушило автоматическую сборку ReadTheDocs, где я указал

 - method: setuptools
  path: Main Project
  

в файле .readthedocs.yml, когда RTD теперь жалуется, что мой пакет (внутри основного каталога проекта) не существует, поскольку он пытается его собрать.

В моем проекте я использую скрипт для сборки пакетов, где я перемещаюсь в каждый каталог, запускаю его настройку, а затем удаляюсь. Работает нормально, все мои пакеты и документация создаются локально. Однако, похоже, что RTD использует defined только path для добавления моего setup.py скрипт и, следовательно, не находит исходный пакет, поскольку рабочий каталог является родительским каталогом (но я могу ошибаться!).

Я прочитал документацию, в том числе https://github.com/readthedocs/readthedocs.org/issues/4354 где эта функция была добавлена изначально, но я сам пока не смог найти решение.

Как я могу указать RTD изменить каталог перед сборкой пакетов, или есть альтернативный подход, который будет поддерживать мою структуру репозитория?

Рассматриваемый репозиторий находится здесь.

Ответ №1:

Я нашел решение:

Я изменил свой локальный сценарий сборки, чтобы использовать корневой каталог проекта, согласно -RTD . Затем я добавил директиву package_dir={"": "[directory]"} к setuptools.setup() вызовам в каждом проекте setup.py .