2009-10-13 8 views
11

Normalmente tiendo a instalar cosas a través del administrador de paquetes, para cosas unixy. Sin embargo, cuando programé una gran cantidad de perl, usaría CPAN, versiones más nuevas y todo eso.Cuál es el más pitónico: instalar módulos de python a través de un administrador de paquetes (macports, apt) oa través de pip/easy_install/setuptools

En general, solía instalar cosas sistema a través del gestor de paquetes, y cosas por el idioma a través de su propio gestor de paquetes (GEM/easy_install | PIP/CPAN)

Ahora, utilizando Python sobre todo, me pregunto cuál es la mejor práctica ?

Respuesta

17

La versión del sistema python y sus bibliotecas a menudo son utilizadas por software en la distribución. Siempre que el software que está usando esté satisfecho con las mismas versiones de python y todas las bibliotecas que su distribución, el uso de los paquetes de distribución funcionará perfectamente.

Sin embargo, con frecuencia necesita una versión de desarrollo de paquetes, o una versión más nueva, o versiones anteriores. Y luego ya no funciona.

Por lo tanto, generalmente se recomienda instalar su propia versión de Python que use para desarrollo y crear entornos de desarrollo con buildout o virtualenv o ambos, para aislar el python del sistema y el entorno de desarrollo entre sí.

+1

[pyenv] (https://github.com/yyuu/pyenv#readme) es una herramienta maravillosa para administrar múltiples versiones de Python y [virtualenvs] (https://github.com/yyuu/pyenv-virtualenv#readme) –

17

Hay dos campos totalmente opuestos: uno a favor de los paquetes proporcionados por el sistema, y ​​uno a favor de la instalación por separado. Personalmente estoy en el campamento de "paquetes de sistema". Proporcionaré argumentos de cada lado a continuación.

Paquetes de sistema Pro: el empaquetador del sistema ya se preocupa por la dependencia y el cumplimiento de las políticas generales del sistema (como el diseño de archivos). Los paquetes del sistema proporcionan actualizaciones de seguridad a la vez que se preocupan por no romper la compatibilidad, por lo que a veces respaldan correcciones de seguridad que los autores originales no respaldaron. Los paquetes del sistema son "seguros" wrt. Actualizaciones del sistema: después de una actualización del sistema, es probable que también tenga una nueva versión de Python, pero todos sus módulos de Python todavía están allí si provienen de un empaquetador del sistema. Esa es toda la experiencia personal con Debian.

Paquetes del sistema Con: no se puede proporcionar todo el software como un paquete del sistema, o no en la última versión; instalar cosas usted mismo en el sistema puede romper los paquetes del sistema. Las actualizaciones pueden romper su aplicación.

Instalación independiente Pro: algunas personas (en particular los desarrolladores de aplicaciones web) argumentan que es absolutamente necesario una configuración repetible, con solo los paquetes que desee, y completamente desacoplado del sistema Python. Esto va más allá de los paquetes autoinstalados frente al sistema, ya que incluso para autoinstalarse, aún puede modificar el sistema python; con la instalación separada, no lo hará. Como discute Lennart, ahora hay cadenas de herramientas dedicadas para admitir esta configuración. La gente argumenta que solo este enfoque puede garantizar resultados repetibles.

Instalación separada: tiene que encargarse de las correcciones de errores usted mismo, y debe asegurarse de que todos los usuarios utilicen la instalación por separado. En el caso de las aplicaciones web, esta última suele ser fácil de lograr.

+0

Bastante justo. Siempre me pregunto por qué setuptools y especialmente rubygems et al no se instalan en/usr/local tree, que es el lugar para las cosas que son, bueno, locales. Ah bueno. Por lo que vale, también es un administrador de sistemas (¿no somos muchas cosas?) Prefiero tu enfoque. Sin embargo, parece ser bastante problemático con Python.Sosteniendo mi nariz y yendo a la "ruta del entorno de desarrollo" – chiggsy

+1

Estoy totalmente de acuerdo en que los paquetes de distribución son preferibles cuando se instala en el sistema Python. Pero eso para el trabajo de desarrollo, y también un sistema de producción que hace mucho, querrá entornos separados para los softwares separados (a menos que todos vengan como paquetes de distribución actualizados y mantenidos). –

+0

Como política personal, me abstengo de utilizar un software para el que no hay un paquete del sistema o una versión diferente a la que proporciona el paquete del sistema. Esto puede significar que no puedo usar muchos paquetes: mala suerte; Tal vez tenga que reimplementar cosas. En el lado positivo, estoy restringido a usar software "estable", por lo que en realidad no necesito rastrear todas y cada una de las versiones de desarrollo solo porque alguna biblioteca decide que requiere una versión inédita de algún otro paquete. –

Cuestiones relacionadas