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?
Respuesta
SWIG proporciona una ruta para la generación de código multiplataforma.
Lo siento, no estaba claro al respecto. La pregunta es acerca de la compilación real, no del desarrollo del código. – golobor
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).
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.
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
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
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. –
- 1. python para extensiones de Firefox?
- 2. depuración extensiones para Python swig
- 3. Establecer el compilador C/C++ para las extensiones de Python
- 4. ¿Cómo puedo usar valgrind con las extensiones de Python C++?
- 5. Perfilando extensiones python C
- 6. Diferentes extensiones de archivos para diferentes versiones
- 7. ¿Qué significan las extensiones de archivo python, .pyc .pyd .pyo?
- 8. Extensiones Python y OpenMP C
- 9. python: cómo enviar correo con TO, CC y BCC?
- 10. ¿Cuáles son las técnicas más utilizadas para habilitar las extensiones de código de usuario en Python?
- 11. Extensiones/módulos anidados de Python C?
- 12. Cómo usar extensiones C en python para evitar GIL
- 13. SQLAlchemy con Python 3.2: ¿las extensiones C no son compatibles?
- 14. ¡Juego! marco: las vistas no se compilan?
- 15. Python Eliminando ciertas extensiones de archivos
- 16. Python abierta() Unicode comportamiento de nombre de archivo diferentes sistemas operativos a través de
- 17. Usando diferentes versiones de python para diferentes proyectos en Eclipse
- 18. Extensiones de Python para Win64 a través de GCC
- 19. Idéntica construcción en diferentes sistemas
- 20. ¿Cómo se implementan las consolas de depuración en Python?
- 21. ¿Cómo se compilan las clases anónimas en Java?
- 22. Python Pypi: ¿cuál es su proceso para lanzar paquetes para diferentes versiones de Python? (Linux)
- 23. Diferentes API de Google Python
- 24. Instalación de python con extensiones de python win32 en una unidad de red
- 25. Docstrings en C extensiones a Python?
- 26. ¿Por qué los scripts principales de Python ejecutables no se compilan en archivos pyc como módulos?
- 27. ¿Incluye una aplicación de Python como un único archivo para admitir complementos o extensiones?
- 28. Python DB-API: cómo manejar diferentes paramstyles?
- 29. ¿Cómo se compilan los métodos de extensión?
- 30. Error de valor al intentar instalar las extensiones de Python para Windows
Puede encontrar información limitada sobre esto [en los documentos oficiales de Python] (http://docs.python.org/distutils/builtdist.html). –
Gracias, pero esto responde la pregunta solo parcialmente. – golobor
Creo que [Christoph Gohlke] (http://www.lfd.uci.edu/~gohlke/) podría responder esta pregunta. Traje su atención a eso. –