Previamente explique como hacer instalar paquetes Python con setuptools y EasyInstall y ahora le presento la manera actualmente mas recomendada para instalar paquetes Python con las herramientas Distribute y pip.
Introducción
Python, Es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un código legible. Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico, es fuertemente tipado y multiplataforma.
¿Qué es Distribute?
Distribute es un conjunto de mejoras en el módulo de la biblioteca estándar de Python: distutils (para Python 2.3.5 y hasta en la mayoría de las plataformas, plataformas de 64 bits requieren como mínimo de Python 2.4) que le permite crear con más facilidad la distribución de paquetes de Python, en especial los que tienen las dependencias de otros paquetes.
Distribute se creó porque el paquete Setuptools actualmente ya no se mantiene. Los paquetes de terceros, es probable que requieran setuptools, que es proporcionado por el paquete Distribute. Por lo tanto, en cualquier momento si los paquetes dependen del paquete Setuptools, Distribute intervendrá para decir que ya ofrece el módulo de setuptools.
Estado actual del Empaquetamiento en Python
El módulo distutils es parte de la librería estándar de Python y aun lo será hasta la versión Python 3.3.
Nota: El módulo distutils será descontinuado en Python 3.3.
El módulo distutils2 (note el número dos) tendrá compatibilidad hacia atrás hasta Python 2.4 en adelante; y será parte de la librería estándar en la versión Python 3.3.
El módulo distutils provee las bases para empaquetar aplicaciones Python. Desafortunadamente, el módulo distutils está plagado de problemas, razón por la cual un pequeño grupo de programadores de Python están trabajando en distutils2. Sin embargo, hasta que distutils2 este completado, se recomienda que en el desarrollador pueda usar tanto el paquete distutils como el paquete Distribute para empaquetar software Python.
Al mismo tiempo, si un paquete requiere el paquete Setuptools, la recomendación es que instale el paquete Distribute, el cual provee una versión más actualizada del paquete Setuptools que el paquete original de Setuptools.
En el futuro distutils2 remplazará a setuptools y distutils, le cual también removerá la necesidad de Distribute. El como del estado anterior distutils será removido de la librería estándar. Para más información, por favor, consulte el Futuro del Empaquetado en Python.
Consejo
Ver el vídeo de la PyCon 2011 – Packaging, from Distutils to Distutils2, Packaging or installing a Python application can be extremely painful por Tarek Ziadé esta charla le sumergiera dentro de las nuevas características de Distutils2 y explica como usted puede usarlo en su proyecto hoy para hacer más fácil la vida para todo el mundo (usuarios, administradores de paquetes de Sistemas operativos, programadores, etc.).
Para descargar el vídeo haga clic aquí (Tamaño 294 mb) y para ver por vídeo Stream haga clic aquí.
¿Qué es pip?
pip es una herramienta para instalar y administrar Paquetes Python, como los que podemos encontrar en el Índice de Paquetes de Python - PyPI.
Truco
Esta herramienta es el remplazo para la famosa herramienta easy_install.
En su mayoría, pip utiliza las mismas técnicas para encontrar los paquetes, por lo que los paquetes que se instalaban usando la herramienta easy_install también deben ser instalables con la herramienta pip.
Esto significa que usted puede utilizar con el siguiente comando:
$ pip install AlgunPaquete
En lugar del tradicional comando usado con la herramienta easy_install como se describe a continuación:
$ easy_install AlgunPaquete
pip comparado con easy_install
pip ofrece mejoras a la herramienta easy_install. Algunas de las mejoras son:
- Todos los paquetes se descargan antes de iniciar la instalación. Una instalación parcialmente completada no se produce como resultado.
- Tiene cuidado de presentar una salida útil en la consola.
- Las razones de las acciones de instalación se le aplica un seguimiento. Por ejemplo, si un paquete se está instalando, pip sigue la pista de por qué ese paquete era necesario.
- Los mensajes de error debe ser útiles.
- El código fuente es relativamente conciso y coherente, por lo que es más fácil de usar mediante programación.
- Ofrece soporte nativo para otros sistemas de control de versiones (Git, Mercurial y Bazaar)
- Tiene un mecanismo de desinstalación de paquetes.
- Fácil de definir conjuntos de requerimientos y reproducir de forma fiable un conjunto de paquetes.
- Los paquetes no tienen que ser instaladas como archivos de huevo, que pueden ser instalados en forma plana (mientras cuida la metadata de paquetes Egg).
pip no hacer todo lo que se easy_install. En concreto:
- No se puede instalar a partir de paquetes Egg. Sólo se instala desde el código fuente. (En el futuro será bueno si se pudiera instalar los binarios de Windows EXE o MSI -.. pero instalar paquetes binarios para otras plataformas no es una prioridad).
- No entiende la sección SetupTools Extras (como package[test]). Esto podría ser agregado eventualmente.
- Es incompatible con algunos paquetes que tienen muchas personalizaciones distutils o setuptools en sus archivos setup.py.
Instrucciones de Instalación
Siempre existen más de dos formas de instalar paquetes Python con Distribute y pip ;)
Requerimientos previos
Es necesario que instale ciertas dependencias en su sistema operativo como las que se muestran a continuación:
# aptitude install build-essential python-dev python-setuptools
Instalación con Paquetes Egg
Para instalar Distribute ejecute el siguiente comando:
# easy_install -U distribute
También para instalar pip ejecute el siguiente comando:
# easy_install -U pip
Instalación en sistemas Debian
La instalación en sistemas Debian es recomendable que instale ciertas dependencias en su sistema operativo como las que se muestran a continuación:
# aptitude install build-essential python-dev python-pip
Ejemplos de uso de pip
El script pip ofrece varias formas de uso, para instalar los paquetes de diversas fuentes:
Consejo: Para poder utilizar el pip, primero debe instalar setuptools o distribute. Si utiliza virtualenv, una copia del pip será automáticamente instalados en cada entorno virtual que usted crea.
easy_install se puede complementar con virtualenv, y se recomienda que lo utilice para aislar a la instalación de los paquetes Egg.
Ejemplo 1. Instalar un paquete su nombre en su versión más reciente, buscando en PyPI:
$ pip install SQLObject
Ejemplo 2. Instalar o actualizar un paquete por nombre y versión utilizando una dirección URL donde encontradas en una “página de descargas”:
$ pip install -f http://dist.plone.org/packages/ 'Pillow==1.7.3'
Ejemplo 3. Instalar o actualizar un paquete desde su propio replica del repositorio PyPI o su repositorio de paquetes Egg privados:
$ pip install -i http://pypi.ejemplo.com/simple SQLObject
Ejemplo 4. Descargar e instalar una distribución de código fuente:
$ pip install http://ejemplo.com/ruta/a/MiPaquete-1.2.3.tgz
Ejemplo 5. Instalar un paquete con una versión especifica:
$ pip install 'ZopeSkel==2.21.2'
Ejemplo 6. Instalar todas las dependencias de mi proyecto Python usando un archivo de dependencias requeridas para instalar:
$ pip install -r ./requirements.txt
Un ejemplo del archivo requirements.txt puede ser el siguiente:
python-ldap django buildbot buildbot-slave PyYAML south
Ejemplo 7. Actualizar un paquete ya instalado con la versión más reciente de PyPI:
$ pip install --upgrade PyProtocols
Ejemplo 8. Para usar realizar búsquedas de paquetes disponibles para instalar desde los repositorios por definidos:
$ pip search plonetheme-*
Ejemplo 9. Para remover un paquete Egg
$ pip uninstall SQLObject
Para más información consulte la ayuda disponible por que paquete pip ejecutando el siguiente comando:
$ pip help
Distribute en zc.buildout
Puede usar Distribute en zc.buildout, habilitando el uso de este por medio de un parámetro adicional en su archivo bootstrap.py de la siguiente manera:
$ python bootstrap.py --distribute
pip en zc.buildout
Existen varias estrategias para integrar pip en zc.buildout, a continuación se describen algunas formas:
gp.recipe.pip, ese paquete es un récipe de zc.buildout el cual permite instalar Paquete Python usando pip. A continuación se explica un ejemplo de configuración zc.buildout con este récipe se puede usar:
- El récipe agrega un virtualenv en el directorio parts/ de su instalación buildout, entonces genera este binario para generar un scripts ejecutable Python. Así que tienes un área de pruebas limpia de instalaciones previas.
- El récipe esta basado en zc.recipe.egg#scripts para que pueda compartir sus paquetes Egg entre buildouts como de costumbre.
- Por supuesto, usted puede instalar algunos archivos .pybundle.
- Usted puede construir paquetes desde un repositorio SVN con la opción editables.
- Cada linea encontrada en la opción install es la última parte de un comando de pip. Esta le permitirá a usted construir paquetes Egg con sus dependencias. Por ejemplo, instalar la librería lxml en un área de prueba pura, sin tener instalado libxml2 y libxslt, usted necesita tener instalado Cython y con esta línea de comando python setup.py install --static-deps para instalar el paquete lxml.
A continuación un ejemplo de configuración zc.buildout:
[buildout] # the cache dir is used by buildout & pip download-cache = download parts = eggs [eggs] recipe = gp.recipe.pip # eggs installed by pip (also add the Deliverance bundle) install = Cython --install-option=--static-deps lxml==2.2alpha1 http://deliverance.openplans.org/dist/Deliverance-snapshot-latest.pybundle # eggs installed by zc.recipe.egg eggs = Paste pyquery
Otra forma de usar pip es a través de una extensión zc.buildout llamada gp.vcsdevelop, para hacer checkout de paquetes Egg desde varios sistemas de control de versiones. A continuación se muestra un ejemplo de configuración zc.buildout con esta extensión:
[buildout] ... extensions = gp.vcsdevelop develop-dir = ./requirements requirements = requirements.txt parts = eggs ... [eggs] recipe = zc.recipe.egg eggs = ${buildout:requirements-eggs} interpreter = python ...
Un ejemplo del archivo requirements.txt puede ser el siguiente:
ConfigObject>=1.0 -e git+git://github.com/bearstech/PloneTerminal.git#egg=PloneTerminal
Ver también
Le recomiendo consultar las siguientes enlaces para complementar el conocimiento adquirido en esta entrada en mi blog.
Espero sea de utilidad esta entrada en mi blog. Ayúdame a seguir escribiendo en mi blog y dona 1 dolar aquí.
Referencias
- El articulo Distribute y pip desde la documentación de Plone en Español.
- Installing the Package Tools.
- pip v1.0.2 documentation.
- Combine zc.buildout and pip benefits.
