2010-11-28 15 views
6

¿Es posible importar módulos arbitrarios en cython, compilarlos en archivos de objetos compartidos y luego usarlos en python 3.1?usando cython para portar módulos a python 3.1

La razón para esto es que estoy escribiendo una extensión para el programa "blender", que tiene un intérprete interno de python 3.1. Pero también me gustaría hacer uso de algunos módulos de python que no están portados a 3.x, pero

Tengo un numpy específico en mente (pero también algunas otras bibliotecas). Tengo un módulo que hace uso de numpy. Como quiero redistribuir ese módulo, no quiero que nadie lo instale en sus máquinas. ¿Funcionaría eso?

+0

Cython es para escribir módulos de extensión CPython, no para hacer aplicaciones de forma independiente. Utilice [cx_Freeze] (http://cx-freeze.sourceforge.net/) para eso. Además, ¿qué tiene esto que ver específicamente con Python 3? – delnan

+0

No puedo usar cx_Freeze, ya que solo quiero redistribuir el módulo, junto con una versión de python incrustada. no es un ejecutable – user290494

+0

ohh Olvidé: esa aplicación que tiene un intérprete interno de python usa Python 3.1 (su mezclador (www.blenderorg)). algunas bibliotecas solo están disponibles en python 2.xx, por lo que sería genial ponerlas a disposición de python 3 compilándolas ... – user290494

Respuesta

4

En principio, creo que es posible. Cython funciona traduciendo el código similar a Python al código C. Ese código se puede compilar para Python 2 o Python 3 (usa declaraciones de preprocesador C para cambiar qué código se usa).

La mala noticia es que solo funcionará para las extensiones escritas en código similar a Python que Cython puede traducir. No puede usar Cython en extensiones escritas en C, como Numpy.

La buena noticia es que, al menos para Numpy, no debería tener que hacerlo. Desde version 1.5, Numpy admite Python 3. Hay un binario disponible para Windows; en otros sistemas, es posible que deba averiguar cómo compilar el código usted mismo.

-2

Consulte la documentación de Python, la sección "Manual de referencia de Python/C API" describe en detalle cómo hacerlo.

EDITADO: Lo que quiere es portar una 2.x lib a 3.x. Eso es un gran trabajo por hacer. Si la solución que deseaba existe. Python 2.x ya debería haber sido eliminado. Seguro que hay una herramienta 2to3. Pero una lib de Python escrita por C no es aplicable de esta manera.

Por lo tanto, puede seguir las instrucciones del "Manual de referencia de Python/C API" para llevar la lib a 3.x o simplemente esperar.

Cuestiones relacionadas