2012-01-04 12 views
8

He notado que varias bibliotecas maduras de Python tienen versiones precompiladas para la mayoría de las arquitecturas (Win32/Win-amd64/MacOS) y versiones de Python. ¿Cuál es la forma estándar de compilación cruzada de extensiones para diferentes entornos? ¿Vino? ¿Maquinas virtuales? Multitud de fuentes?¿Cómo se compilan las extensiones Python C/C++ para diferentes sistemas operativos/versiones de Python?

+2

Puede encontrar información limitada sobre esto [en los documentos oficiales de Python] (http://docs.python.org/distutils/builtdist.html). –

+0

Gracias, pero esto responde la pregunta solo parcialmente. – golobor

+0

Creo que [Christoph Gohlke] (http://www.lfd.uci.edu/~gohlke/) podría responder esta pregunta. Traje su atención a eso. –

Respuesta

0

SWIG proporciona una ruta para la generación de código multiplataforma.

+0

Lo siento, no estaba claro al respecto. La pregunta es acerca de la compilación real, no del desarrollo del código. – golobor

0

Todos mis módulos de extensión de Python son C++, no C, así que utilizo boost Python. También uso máquinas virtuales cuando necesito admitir diferentes sistemas operativos. El controlador de compilación bjam de Boost le permite compilar con versiones diferentes de Python (2.6, 2.7) versiones diferentes de g ++ y varias otras cosas. Si tuviera un módulo de extensión que fuera muy popular y muchas personas quisieran usarlo en plataformas que no tengo, entonces solo me aseguraría de que mi código fuera muy portable (debería serlo de todos modos) y daría instrucciones sobre cómo construirlo. con bjam usando varios ejemplos diferentes para diferentes versiones de Python, etc. Eso sería suficiente para comenzar. Si esto funciona, podría pedirles que contribuyan con sus versiones para que otros puedan usarlas (sin su respaldo, por supuesto).

7

Utilizamos máquinas virtuales y un servidor Hudson.

Tenemos una máquina virtual para cada arquitectura que admitimos (en general, compilar no estirar los recursos asignados a ellos, por lo que una máquina virtual está bien). Supongo que la configuración de cada VM podría ser administrada por algo como Puppet o Chef para garantizar que sea un entorno de compilación adecuado. Por supuesto, podría usar máquinas reales si tiene el hardware, pero querría evitar el uso de máquinas que las personas realmente están usando (por ejemplo, estaciones de trabajo de desarrolladores).

A continuación, utilizamos un proyecto de configuración múltiple en Hudson para configurar una matriz de construcción. La matriz de compilación nos permite (con un solo clic) construir múltiples versiones de Python, en múltiples arquitecturas, pero en teoría puede construir todas las combinaciones que pueda configurar en su matriz. Por supuesto, podrías usar Jenkins en su lugar.

+0

adivina que la forma vm podría ser "semi" ilegal si uno de tus objetivos es osX :) aún parece que la forma VM es probablemente la mejor manera de hacerlo. – ashwoods

+0

OSX ha permitido la virtualización desde hace un tiempo: http://www.macworld.com/article/1163755/vmware_fusion_update_lets_users_virtualize_leopard_snow_leopard.html – hbar

+0

En realidad, utilizamos una pequeña granja de mac mac específicamente para OSX en lugar de servidores virtualizados - lo siento, debería haber aclarado eso en la respuesta original. Especialmente cuando compramos en ebay, estos son lo suficientemente baratos para lo que requerimos, y están apilados en una esquina de la sala de máquinas. Pero como dice hbar, virtualizar estos también es una opción legal ahora. –

Cuestiones relacionadas