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
