Генерация Automati c Sphinx HTML с использованием pip? - PullRequest
0 голосов
/ 04 февраля 2020

Текущая ситуация:

В моем текущем проекте я включил setuptools для реализации Sphinx-Do c, запустив

python setup.py build_sphinx

И следовал инструкциям кода в предыдущем посте SO , чтобы реализовать сценарий после установки в самом файле setup.py, чтобы я мог одновременно запускать вышеуказанный код, когда выполняю

python install .

для моего пакета.

Однако я не хочу использовать python install , но предпочитаю использовать pip install или pip вместо этого установите -e .

Актуальная проблема:

Когда я использую pip для своего пакета, я не могу сгенерировать документацию непосредственно внутри папки (для ради проблемы, он находится в C: \ Users \ XXXXX \ My_GitHub \ My_Package ), но он всегда создается в папке LocalAppData. Как мне динамически передавать путь к папке My_Package при запуске pip для генерации / копирования документации в актуальный каталог?

My setup.py код:

import os
import glob
from typing import List

from setuptools import setup, find_packages
from sphinx.setup_command import BuildDoc
from setuptools.command.develop import develop
from setuptools.command.install import install
from subprocess import call
from distutils.dir_util import copy_tree

def run_sphinx(dst_dir: str,
               pattern_list: List[str]=None):
    r"""Script that generates Sphinx Documentation as Post-or Pre-Install"""
    # We create the conf.py and .rst using sphinx-apidoc command
    apidoc_call_list = ['sphinx-apidoc',
                        # r'--templatedir=.\doc\_templates',    # Uses custom template
                        '-F', '-f',                           # Runs sphinx-quickstart fully and forces overwriting .rst
                        '-M',                                 # Module first
                        '-o', r'.\doc',                      # Destination directory
                        '.',                                  # Package source location
                        ]
    if pattern_list:
        for pattern in pattern_list:
            apidoc_call_list.append(pattern)
    call(apidoc_call_list)

    # We create the documentation with BuildDoc using customized build_sphinx command
    call(['python', 'setup.py', 'build_sphinx'])

    # Here is a HACK method to copy the docs from the LocalAppData folder to the
    # working folder. Sensible way to dynamically generate the document at repo location
    # is not yet available.
    pip_glob_dir = glob.glob(os.path.join(os.getenv('LocalAppData'), 'Temp', "pip-req-build*"))
    if pip_glob_dir:
        src_dir = os.path.join(pip_glob_dir[0], 'doc')
        dst_dir = os.path.join(dst_dir, 'doc')
        copy_tree(src_dir, dst_dir)


class PostDevelopCommand(develop):
    """Post-installation for development mode."""
    def run(self):
        develop.run(self)
        run_sphinx(dst_path)


class PostInstallCommand(install):
    """Post-installation for installation mode."""
    def run(self):
        install.run(self)
        run_sphinx(dst_path)


cmdclass = {"build_sphinx": BuildDoc,
            'install': PostInstallCommand,
            'develop': PostDevelopCommand}

name = "Name of package"
version = "0.7"
release =  "0.7.0"
dst_path = r"C:\Users\XXXXX\My_GitHub\My_Package"

setup(
    name=name,
    version=version,
    cmdclass=cmdclass,
    ...
    )
...