Skip to main content

CID-DOCS

Documentation Status

Bienvenidos al sitio de documentación del Centro de investigación Digitial del Instituto Tecnologico de Buenos Aires

Hemos armado un tutorial que les enseñara paso a paso como auto-documentar un proyecto con Sphinx y publicar la documentación de su proyecto en Read the Docs.

Una vez alcanzado este objetivo ahondaremos en como publicar nuestro paquete en PYPI para poder instalarlo mediante pip.

Preparando los Docstrings

Se llaman docstring a un formato especial de comentario que se utiliza para dar estructura a la documentación. Con estos podemos especificar detalladamente el funcionamiento de las clases y metodos implementados.

Existen diversos formatos de doctrings compatibles con Sphinx.

  • Sphynx Style
  • Google Style
  • Numpy Style

Pueden aprender más acerca de estos y como utilizarlos aquí.

En nuestro caso hemos decidido utilizar Numpy Style por su simplicidad y practicidad para documentar.

class Hotel:
    """
    El hotel tiene varias habitaciones

    Parameters
    --------
    nombre : str
                Nombre del hotel
    cuartos : int
                Cantidad de cuartos en el hotel
    """


    def __init__(self, nombre, cuartos):
        self.cuartos = cuartos
        self.nombre = nombre

    def make_meal(self, name, size, temperature)
        """
        Parameters
        --------
        name : str
                Type of food to prepare
        size : float
                How many kilos to prepare
        temperature : float
                    How hot it should be

        Returns
        --------
        meal : object
                Your desired meal

        Raises
        ------
        ValueError
            if 'name' is not present is not a meal.
        Examples
        --------
        >>> hotel = Hotel("PythonHotel", 400)
        >>> hotel.make_meal("Fried Chicken", 4)

        See Also
        --------
        Hotel.make_dessert : for instruction on how to make a dessert.

        """
        pass

    def make_dessert(self, name, size)
        """
        ...
        """
        pass

Para más ejemplos de documentación les recomendamos mirar el codigo de fuente de SimilarityLab o Numpy

Empaquetando

Nuestro proyecto tiene que poder ser identificado como un paquete distribuible de Python. Para ello necesitamos dos archivos escenciales, __init__.py y setup.py. Ambos deben alojarse en el mismo directorio que nuestro modulo.

El archivo __init__.py solamente deber exisitir y puede estar vacio. No hay más requerimientos que esos.

Para que Sphinx pueda rastrear la versión en la que actualmente estamos trabajando, como así conocer las dependencias de nuestro proyecto, es necesario generar un archivo setup.py.

El mismo debe encontrarse en el mismo directorio que nuestra clase.

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="ProjectName",
    version="0.0.1",
    author="Example Author",
    author_email="author@example.com",
    description="A small example package",
    long_description=long_description,
    long_description_content_type="text/markdown",
    keywords='Cats dogs words',
    url="https://github.com/pypa/sampleproject",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    install_requires=[
          'numpy',
          'scipy',
          'SimiLab',
      ],
    python_requires='>=3.6',
)

Sphinx

Primeros pasos

Para poder generar nuestra documentación vamos a requerir instalar Sphinx.

pip install sphinx

y para generar nuestro archivo de requerimientos necesitaremos

pip install pipreqs

Una vez instalados corremos desde el directorio raiz de nuestro proyecto

>\MyProject sphinxquickstart docs -ext-autodoc

Recomendamos seguir las opciones por defecto que nos ofrece la CLI de Sphinx.

Una vez terminado deberiamos tener la siguiente estructura:

-MyProject
    -MyPackage
        -package.py
        -__init__.py
        -setup.py
    -docs
        -docs
        -conf.py
        -index.rst
        -make.bat
        -Makefile

:construction: index.rst :construction:

Así como en HTML se trabaja con un archivo principal llamado index.html. Cuando trabajamos con sphinx vamos a tener un punto de entrada llamado index.rst. Aquí ensamblaremos la estructura de nuestra documentación. En este caso utilizamos reStructuredText como lenguaje de markup.

Welcome to SimilarityLab's documentation!
=========================================

.. toctree::
   :maxdepth: 2
   :caption: Contents:

   pages/getting-started

.. automodule:: SimiLab
   :members:

Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

La indentación es vital para no incurrir en errores al momento de compilar.

Por ejemplo la directiva automodule le dice a Sphinx que tome todos los docstrings contenidos en SimiLab

conf.py

El archivo conf.py es generado de forma automatica luego de llamar a sphinxquickstart. Para permitir que Sphinx encuentre nuestro paquete es necesario indicarle donde se encuentra. Sugerimos utilizar de ejemplo el archivo conf.py que se encuentra aquí.

Recordar configurar

  • Extensiones de Sphinx
  • Path
  • Tema (sugerimos 'default')

Archivos .readthedocs.yml y requirements.txt

Ciertamene la mayoría de los proyectos requieren ciertas dependecias externas. Sin embargo, aunque sean paquetes de terceros, hay que especificar cuales son.

  1. En el directorio raiz crear un archivo .readthedocs.yml
  2. Copiar el archivo de ejemplo
Luego debemos generar nuestro archivo de requerimientos
 >MyProject/MyPackage pipreqs > requirements.txt

Se recomienda mover el mismo a la carpeta docs

:construction: make html, rdft :construction:

Metadata

Release files for SimilarityLab 0.0.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for SimilarityLab 0.0.5.1
File Size Uploaded
SimilarityLab-0.0.5.1.tar.gz 10.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for SimilarityLab 0.0.5.1
File Interpreter ABI Platform
SimilarityLab-0.0.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 19.1 kB

Release files / SimilarityLab-0.0.5.1.tar.gz

Download URL SimilarityLab-0.0.5.1.tar.gz
Size 10.1 kB
Tags Source
SHA-256 checksum
How to use checksums
fac6a87ad317ea10db867354f7e45ac8632d53eab511e7e1c69ca95425cae81e
BLAKE2b-256 checksum
How to use checksums
3d82e45cf0824d9f160e5f3f88a125750ae73e8a8c39a5ed8f138532b2569c14
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.0

Release files / SimilarityLab-0.0.5.1-py3-none-any.whl

Download URL SimilarityLab-0.0.5.1-py3-none-any.whl
Size 9.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
42c870badf94dce66f76ccdc775b47d0ee8a7ac4bcb99529ddf45b2999b9e39b
BLAKE2b-256 checksum
How to use checksums
80b6c3c41e70f1b146b797867e3eca06e237fcccbdb6545134a8995beb1a211c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.0

Release history Release notifications | RSS feed

This release

0.0.5.1 This release

2 release files

0.0.5

2 release files

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page