# Distribuir módulos de Python

Email

  distutils-sig@python.org

Como un proyecto de desarrollo de código abierto popular, Python tiene una comunidad activa de colaboradores y usuarios que también hacen que su software esté disponible para que otros desarrolladores de Python los usen bajo términos de licencia de código abierto.

Esto permite a los usuarios de Python compartir y colaborar eficazmente, beneficiándose de las soluciones que otros ya han creado a problemas comunes (¡y a veces incluso raros!), así como potencialmente contribuyendo con sus propias soluciones al grupo común.

Esta guía cubre la parte de distribución del proceso. Para obtener una guía para instalar otros proyectos de Python, consulte installation guide.

Nota

Para usuarios corporativos y otros usuarios institucionales, tenga en cuenta que muchas organizaciones tienen sus propias políticas en torno al uso y la contribución al software de código abierto. Por favor tenga en cuenta estas políticas al hacer uso de las herramientas de distribución e instalación proporcionadas con Python.

## Términos clave

- el Python Package Index es un repositorio público de paquetes con licencia de código abierto puestos a disposición para su uso por otros usuarios de Python

- la Python Packaging Authority es el grupo de desarrolladores y autores de documentación responsables del mantenimiento y la evolución de las herramientas de empaquetado estándar y los metadatos asociados y los estándares de formato de archivo. Ellos mantienen una variedad de herramientas, documentación y rastreadores de problemas tanto en GitHub como Bitbucket.

- `distutils` es el sistema de distribución y compilación original que se agregó por primera vez a la biblioteca estándar de Python en 1998. Si bien el uso directo de `distutils` se está eliminando, aún es la base para la infraestructura de empaquetado y distribución actual, y no solo sigue siendo parte de la biblioteca estándar, sino que su nombre vive de otras formas (como el nombre de la lista de correo utilizada para coordinar el desarrollo de estándares de empaquetado de Python).

- setuptools es un reemplazo (en gran parte) directo de `distutils` publicado por primera vez en 2004. Su adición más notable sobre las herramientas sin modificar `distutils` fue la capacidad de declarar dependencias en otros paquetes. Actualmente se recomienda como una alternativa actualizada con más regularidad a `distutils` que ofrece soporte consistente para estándares de empaquetado más recientes en una amplia gama de versiones de Python.

- wheel (en este contexto) es un proyecto que agrega el comando `bdist_wheel` a `distutils`/setuptools. Esto produce un formato de empaquetado binario multiplataforma (llamado «wheels» o «wheel files» y definido en PEP 427) que permite que las bibliotecas de Python, incluso aquellas que incluyen extensiones binarias, se instalen en un sistema sin necesidad de ser compiladas en la zona.

## Licencias de código abierto y colaboración

En la mayor parte del mundo, el software está automáticamente protegido por derechos de autor. Esto significa que otros desarrolladores requieren permiso explícito para copiar, usar, modificar y redistribuir el software.

La concesión de licencias de código abierto es una forma de otorgar explícitamente dicho permiso de una manera relativamente consistente, lo que permite a los desarrolladores compartir y colaborar de manera eficiente al hacer que las soluciones comunes a varios problemas estén disponibles de forma gratuita. Esto deja a muchos desarrolladores libres para dedicar más tiempo a concentrarse en los problemas que son relativamente únicos para su situación específica.

Las herramientas de distribución proporcionadas con Python están diseñadas para que sea razonablemente sencillo para los desarrolladores hacer sus propias contribuciones a ese grupo común de software si así lo desean.

Las mismas herramientas de distribución también se pueden utilizar para distribuir software dentro de una organización, independientemente de si ese software se publica como software de código abierto o no.

## Instalando las herramientas

La biblioteca estándar no incluye herramientas de compilación que sean compatibles con los estándares de empaquetado de Python modernos, ya que el equipo de desarrollo central ha descubierto que es importante tener herramientas estándar que funcionen de manera consistente, incluso en versiones anteriores de Python.

Las herramientas de construcción y distribución recomendadas actualmente se pueden instalar invocando el módulo `pip` en la línea de comando:

    python -m pip install setuptools wheel twine

Nota

Para los usuarios POSIX (incluidos los usuarios de macOS y Linux), estas instrucciones asumen el uso de un virtual environment.

Para los usuarios de Windows, estas instrucciones asumen que se seleccionó la opción para ajustar la variable de entorno PATH del sistema al instalar Python.

La «Python Packaging User Guide» incluye más detalles sobre las currently recommended tools.

## Leyendo la «Python Packaging User Guide»

La «Python Packaging User Guide» cubre los diversos pasos y elementos clave involucrados en la creación y publicación de un proyecto:

- Estructura del proyecto

- Compilando y empaquetando el proyecto

- Subiendo el proyecto al Python Package Index

- El archivo .pypirc

## Cómo puedo…?

Estas son respuestas rápidas o enlaces para algunas tareas comunes.

### … elegir un nombre para mi proyecto?

Este no es un tema fácil, pero aquí hay algunos consejos:

- verifique el «Python Package Index» para ver si el nombre ya está en uso

- verifique sitios de alojamiento populares como GitHub, Bitbucket, etc. para ver si ya existe un proyecto con ese nombre

- verifique lo que aparece en una búsqueda web para el nombre que está considerando

- evite palabras particularmente comunes, especialmente aquellas con múltiples significados, ya que pueden dificultar que los usuarios encuentren su software cuando lo busquen

### … crear y distribuir extensiones binarias?

Este es un tema bastante complejo, con una variedad de alternativas disponibles según exactamente lo que pretenda lograr. Consulte la «Python Packaging User Guide» para obtener más información y recomendaciones.

Ver también

Python Packaging User Guide: Binary Extensions