2009-12-14 24 views
6

Tenemos una instalación de python común para todos nuestros sistemas con el fin de garantizar que cada sistema tenga la misma instalación de python y para facilitar los problemas de configuración. Esta instalación se encuentra en una unidad compartida. También tenemos múltiples plataformas que comparten esta instalación. Nos acercamos a los archivos conflictivos específicos de la plataforma al configurar la opción de configuración --exec-prefix al compilar Python.¿Cómo puedo lidiar con los huevos de python para plataformas múltiples en una ubicación?

Mi problema es que ahora quiero instalar un huevo usando easy_install (o de otro modo) que depende de la plataforma. easy_install pone el huevo en el directorio site-packages de la parte independiente de la plataforma de la instalación. El nombre del huevo tiene la plataforma, por lo que no debería haber conflicto. Pero Python solo cargará el primero que encuentre. (Entonces, en Solaris podría intentar cargar el huevo de Linux). Modificar el archivo easy-install.pth puede cambiar el que encuentre, pero eso es bastante inútil.

Puedo mover los archivos .egg a un directorio de paquetes dependiente de la plataforma y luego usar pkg_resources.require() para cargarlos (o ajustar manualmente la ruta). Pero parece que no debería tener que hacerlo ya que la plataforma está en el nombre del huevo.

¿Hay alguna otra manera más genérica de asegurarme de que python cargue el huevo para la plataforma correcta?

+0

¿El huevo contiene extensiones C, o es puro pitón? – codeape

+0

Sí, hay una extensión C. De lo contrario, no importaría porque el código no dependería de la plataforma. Específicamente, es el módulo PyPerforce, en caso de que tenga curiosidad. – Philbert

Respuesta

2

Lo que terminé yendo fue mover manualmente el huevo dependiente de la plataforma al directorio de paquetes de sitio específico de la plataforma (como se especifica en http://docs.python.org/install/index.html). Luego hice otra instalación fácil.pth en ese mismo directorio, enumerando los huevos que se instalarán.

Esto sería mucho más conveniente si easy_install fuera a honrar el exec_prefix y colocar huevos dependientes de la plataforma en la ubicación correcta de "distribución de módulos no puros". Quizás solicite esto a la gente de easy_install.

1

Python tiene suficientes ganchos para hacer esto posible, pero probablemente no sea prudente. Si realmente desea implementar esto, consulte PEP 302 y comience a piratear el código fuente easy_install o distribute. Como sabes, no hay realmente ninguna lógica en easy-install.pth.

Probablemente sea mucho mejor que simplemente hacer un seguimiento de qué paquetes de Python desea instalar. Por ejemplo, podría escribir su propio paquete de Python que solo dependa del conjunto deseado.

+0

Y/O use el paquete virtualenv de python para administrar sus paquetes solo para ese proyecto – RyanWilcox

2

Pruebe virtualenv ... http://pypi.python.org/pypi/virtualenv ... le ayuda a crear un entorno aislado con su propia carpeta python interpreter + site_packages. Por lo tanto, nunca tendrá conflictos con los paquetes instalados en, por ejemplo, la ruta local.

0

Use "easy_install -m" para instalar todos los paquetes específicos de la plataforma, de modo que no haya una versión predeterminada en sys.path. De esta forma, la resolución de la versión se lleva a cabo en tiempo de ejecución y se tendrá en cuenta la información de la plataforma.

Cuestiones relacionadas