Publicar su paquete en un repositorio comunitario: PyPI o Anaconda.org#

pyOpenSci requiere que su paquete tenga una distribución que se pueda instalar desde un repositorio comunitario público como PyPI o un canal de conda como bioconda o conda-forge en Anaconda.org.

A continuación, aprenderá más sobre las diversas opciones de publicación para su paquete de Python.

Resumen

  • Instalar paquetes en el mismo entorno usando tanto pip como conda puede dar lugar a conflictos entre paquetes.

  • Para minimizar conflictos para los usuarios que pueden estar usando conda (o pip) para administrar entornos locales, considere publicar su paquete tanto en PyPI como en el canal conda-forge en Anaconda.org.

A continuación, aprenderá más sobre las diferencias específicas entre la publicación de su paquete de Python en PyPI y conda.

Image showing the progression of creating a Python package, building it and then publishing to PyPI and conda-forge. You take your code and turn it into distribution files (sdist and wheel) that PyPI accepts. Then there is an arrow towards the PyPI repository where ou publish both distributions. From PyPI if you create a conda-forge recipe you can then publish to conda-forge.

Once you have published both package distributions (the source distribution and the wheel) to PyPI, you can then publish to conda-forge. The conda-forge requires a source distribution on PyPI in order to build your package on conda-forge. You do not need to rebuild your package to publish to conda-forge.#

¿Qué es PyPI?#

PyPI es un repositorio de paquetes de Python en línea que puede usar para encontrar, instalar y publicar su paquete de Python. También hay un repositorio de prueba de PyPI donde puede probar la publicación de su paquete antes de la publicación final en PyPI.

Muchos, si no la mayoría, de los paquetes de Python se pueden encontrar en PyPI y, por lo tanto, se pueden instalar usando pip.

La mayor diferencia entre usar pip y conda para instalar un paquete es que conda puede instalar cualquier paquete independientemente del lenguaje en el que esté escrito. Mientras que pip solo puede instalar paquetes de Python.

Haga clic aquí para un tutorial sobre cómo publicar su paquete en PyPI.

Truco

En la página de construcción de paquetes, discutimos los dos tipos de distribución de paquetes que creará al hacer un paquete de Python: SDist (empaquetado como .tar.gz o .zip) y Wheel (.whl) que es realmente un archivo zip. Ambos de esos «paquetes» de archivos se publicarán en PyPI cuando use una herramienta de construcción estándar para construir su paquete.

¿Qué es conda y Anaconda.org?#

conda es una herramienta de gestión de paquetes y entornos de código abierto. conda se puede usar para instalar herramientas desde el repositorio de Anaconda.

Anaconda.org contiene repositorios públicos y privados para paquetes. Estos repositorios se conocen como canales (discutidos a continuación).

Una breve historia de la evolución de conda

El ecosistema de conda evolucionó hace años para proporcionar soporte y simplificar el proceso de gestión de dependencias de software en proyectos científicos de Python.

Muchos de los proyectos científicos de Python dependen de o envuelven herramientas y extensiones escritas en otros lenguajes, como C++. En las primeras etapas del desarrollo del ecosistema científico, estas extensiones y herramientas no escritas en Python no eran compatibles en PyPI, lo que hacía que la publicación fuera difícil. En los últimos años, hay más soporte para construcciones complejas que permiten a los desarrolladores empaquetar código no escrito en Python en una distribución de Python usando el formato de distribución de rueda.

Conda proporciona un mecanismo para gestionar estas dependencias y asegurar que los paquetes requeridos se instalen correctamente.

Truco

Si bien conda se creó originalmente para admitir paquetes de Python, ahora se usa en todos los lenguajes. Este soporte entre lenguajes facilita que algunos paquetes incluyan y tengan acceso a herramientas escritas en otros lenguajes, como C/C++ (gdal), Julia o R. Crear un entorno que mezcle todos estos paquetes suele ser más fácil y más consistente con herramientas de administración de paquetes como conda.

Canales de conda#

Los paquetes construidos con conda se alojan en repositorios que se llaman canales. El administrador de paquetes conda puede instalar paquetes de diferentes canales.

Existen varios canales públicos principales que la mayoría de las personas utilizan para instalar paquetes con conda, incluidos:

  • defaults: este es un canal administrado por Anaconda. Es la versión de los paquetes de Python que instalará si instala la Distribución de Anaconda. Anaconda (la empresa) decide qué paquetes viven en el canal defaults.

  • conda-forge: this is a community-driven channel that focuses on scientific packages. This channel is ideal for tools that support geospatial data. Anyone can publish a package to this channel.

  • bioconda: this channel focuses on biomedical tools.

conda-forge surgió motivado por que muchos de los paquetes científicos no existían en el canal defaults de Anaconda.

Graphic with the title Python package repositories. Below it says Anything hosted on PyPI can be installed using pip install. Packaging hosted on a conda channel can be installed using conda install. Below that there are two rows. The top row says conda channels. Next to it are three boxes one with conda-forge, community maintained; bioconda and then default - managed by the anaconda team. Below that there is a row that says PyPI servers. PyPI - anyone can publish to PyPI. And test PyPI. A testbed server for you to practice.

Los canales de conda representan varios repositorios desde los que puede instalar paquetes. Dado que conda-forge es mantenido por la comunidad, cualquiera puede enviar una receta allí. PyPI también es un repositorio mantenido por la comunidad. Cualquiera puede enviar un paquete a PyPI y a test PyPI. A diferencia de conda-forge, no hay comprobaciones manuales de los paquetes enviados a PyPI.#

Canal de conda, PyPI, conda, pip - Dónde publicar su paquete#

Es posible que se pregunte por qué hay diferentes repositorios de paquetes que se pueden usar para instalar paquetes de Python.

Y, lo que es más importante, es probable que se esté preguntando cómo elegir el repositorio adecuado para publicar su paquete de Python.

La respuesta a ambas preguntas se relaciona con conflictos de dependencias.

Imagen que muestra un cómic de XKCD que muestra una red de entornos y herramientas de Python e instalaciones. En la parte inferior dice - Mi entorno de Python se ha degradado tanto que mi ordenador portátil ha sido declarado un sitio de superfinanciación.

Instalar Python y paquetes de Python desde diferentes repositorios puede llevar a conflictos de entorno donde una versión de un paquete no funciona con una versión de otro paquete. Para mantener sus entornos limpios y funcionando, es mejor instalar paquetes desde el mismo repositorio. Por lo tanto, use pip para instalar todo. O use conda. Si puede, intente evitar instalar paquetes tanto de pip como de conda en el mismo entorno.#

Gestión de conflictos de dependencias de paquetes de Python#

Los entornos de Python pueden encontrar conflictos porque las herramientas de Python se pueden instalar desde diferentes repositorios. En términos generales, los entornos de Python tienen una menor probabilidad de conflictos de dependencias cuando las herramientas se instalan desde el mismo repositorio de paquetes. Por lo tanto, los entornos que contienen paquetes instalados tanto desde pip como desde conda tienen más probabilidades de generar conflictos de dependencias.

Similarly installing packages from the default anaconda channel mixed with the conda-forge channel can also lead to dependency conflicts.

Muchos instalan paquetes directamente desde el canal defaults de conda. Sin embargo, debido a que este canal es administrado por Anaconda, los paquetes disponibles en él están limitados a aquellos que Anaconda decide que deben ser fundamentales para una instalación estable. El canal conda-forge se creó para complementar el canal defaults. Permite a cualquiera enviar un paquete para ser publicado en el canal. Por lo tanto, el canal conda-forge garantiza que se puedan instalar una amplia gama de paquetes de la comunidad desarrollados por el usuario desde conda.

Conclusión: Si puede, publique tanto en PyPI como en conda-forge para acomodar a más usuarios de su paquete#

La conclusión aquí para los mantenedores es que si anticipa que los usuarios querrán usar conda para administrar sus entornos locales (lo cual muchos hacen), debería considerar publicar tanto en PyPI como en el canal conda-forge (más sobre eso a continuación).

Como publicar en conda-forge#

¡Si bien pyOpenSci no requiere que agregue su paquete a conda-forge, le sugerimos que lo considere!

Una vez que su paquete esté en PyPI, el proceso para agregar su paquete a conda-forge es sencillo de hacer. Puede seguir los pasos detallados proporcionados por el equipo de mantenimiento de conda-forge..

Haga clic aquí para un tutorial sobre cómo agregar su paquete a conda-forge.

Si desea un tutorial paso a paso, haga clic aquí.

Una vez que se agregue su paquete, tendrá un repositorio de feedstock en GitHub con el nombre de su paquete

Mantenimiento de su repositorio de paquetes conda-forge#

Una vez que su paquete esté en el canal conda-forge, mantenerlo es simple. Cada vez que envíe una nueva versión de su paquete a PyPI, se iniciará una compilación de integración continua que actualizará su paquete en el repositorio conda-forge. Una vez que se complete esa compilación, recibirá una notificación para revisar la actualización.

Puede hacer merge de la pull request para esa actualización una vez que esté contento con ella. Una pull request lista para hacer merge generalmente significa asegurarse de que las dependencias de su proyecto (conocidas como requisitos en tiempo de ejecución) enumeradas en el archivo YAML actualizado en la solicitud de cambio coincidan con los metadatos de PyPI de la nueva versión.