A partir de marzo de 2020, la mayoría de las otras respuestas a esta pregunta están desactualizadas varios años. Cuando encuentre consejos sobre problemas de empaquetado de Python, recuerde consultar la fecha de publicación y no confíe en la información desactualizada.
El Python Guía del usuario Embalaje es digno de una lectura. Cada página muestra una fecha de "última actualización", por lo que puede verificar la actualidad del manual, y es bastante completo. El hecho de que esté alojado en un subdominio de python.org de la Python Software Foundation solo le da crédito. La página de Resúmenes de proyectos es especialmente relevante aquí.
Resumen de herramientas:
Aquí hay un resumen del panorama del empaque de Python:
Herramientas compatibles:
distutils
sigue siendo la herramienta estándar para empaquetar en Python. Se incluye en la biblioteca estándar (Python 2 y Python 3). Es útil para distribuciones simples de Python, pero carece de características. Presenta el distutils
paquete Python que se puede importar en su setup.py
script.
setuptools
fue desarrollado para superar las limitaciones de Distutils y no está incluido en la biblioteca estándar. Introdujo una utilidad de línea de comandos llamada easy_install
. También introdujo el setuptools
paquete Python que se puede importar en su setup.py
script, y el pkg_resources
paquete Python que se puede importar en su código para ubicar los archivos de datos instalados con una distribución. Una de sus trampas es que parchea el distutils
paquete Python. Debería funcionar bien con pip
. Ve lanzamientos regulares.
scikit-build
es un generador de sistema de compilación mejorado que utiliza internamente CMake para compilar extensiones compiladas de Python. Debido a que scikit-build no se basa en distutils, en realidad no tiene ninguna de sus limitaciones. Cuando ninja-build está presente, scikit-build puede compilar grandes proyectos más de tres veces más rápido que las alternativas. Debería funcionar bien con pip
.
distlib
es una biblioteca que proporciona funcionalidad utilizada por herramientas de nivel superior como pip
.
packaging
también es una biblioteca que proporciona funcionalidad utilizada por herramientas de nivel superior como pip
ysetuptools
Herramientas obsoletas / abandonadas:
distribute
fue un tenedor de setuptools
. Compartía el mismo espacio de nombres, por lo que si tuviera instalado Distribute, en import setuptools
realidad importaría el paquete distribuido con Distribute. Distribuir se fusionó nuevamente en Setuptools 0.7 , por lo que ya no necesita usar Distribuir. De hecho, la versión en Pypi es solo una capa de compatibilidad que instala Setuptools.
distutils2
fue un intento de tomar lo mejor de distutils
, setuptools
y distribute
y convertirse en la herramienta estándar incluida en la biblioteca estándar de Python. La idea era que distutils2
se distribuiría para las versiones antiguas de Python, y que distutils2
se renombraría packaging
para Python 3.3, que lo incluiría en su biblioteca estándar. Sin embargo, estos planes no salieron según lo previsto, y actualmente distutils2
es un proyecto abandonado . El último lanzamiento fue en marzo de 2012, y su página de inicio de Pypi finalmente se actualizó para reflejar su muerte.
Otros:
Existen otras herramientas, si está interesado, lea Resúmenes de proyectos en la Guía del usuario de Python Packaging. No voy a enumerarlas todas, para no repetir esa página, y para mantener la respuesta a la pregunta a juego, que era sólo alrededor de distribute
, distutils
, setuptools
y distutils2
.
Recomendación:
Si todo esto es nuevo para usted, y no sabe por dónde comenzar, recomendaría aprendersetuptools
, junto con pip
y virtualenv
, que funcionan muy bien juntos.
Si usted está buscando en virtualenv
, que podría estar interesado en esta pregunta: ¿Cuál es la diferencia entre venv
, pyvenv
, pyenv
, virtualenv
, virtualenvwrapper
, etc? . (Sí, lo sé, gimo contigo)