2011-05-29 21 views
7

Tengo un script de Python, cambié el nombre del script al archivo .pyx. Quiero compilar este código en un archivo dll de pie.Cómo usar Cython para crear un dll de stand

Vi en this document que Cython creará un archivo dll, pero solo obtengo un pyd.

tengo MinGW y tratar de utilizar el comando python setup.py build --compiler=mingw32 para compilar el script de mi código (sólo un hola mundo):

def init(): 
    return "hello world" 

¿Alguna idea? Gracias

+2

Esto no es lo que es para Cython. Es para escribir la extensión de CPython en un dialecto de Python que puede y debe usarse para escribir código de tipo estático de bajo nivel que debe trabajar estrechamente con Python. No para convertir código python en algo que pueda invocarse desde un código no relacionado (por ejemplo, programas C que no conocen CPython). – delnan

Respuesta

3

Así que lo primero que debe hacer es cambiar el nombre del archivo a helloworld.pyx. Ahora necesitamos hacer el setup.py, que es como un Makefile de Python (para más información ver Compilación). Su setup.py debe parecerse :

from distutils.core import setup 
from distutils.extension import Extension 

from Cython.Distutils import build_ext 
    setup(
     cmdclass = {'build_ext': build_ext}, 
     ext_modules = [Extension("helloworld", 
    ["helloworld.pyx"])]) 

de usar esto para crear su archivo Cython usar las opciones de línea de comandos:

$ python setup.py build_ext --inplace 

lo que dejará un archivo en su local de directorio llamado holamundo. por lo tanto, en unix o helloworld.dll en Windows.

ahora a usan este archivo: iniciar el intérprete de python y simplemente importar como si era un módulo de Python normal:

+0

gracias. Lo hago igual que usted, en xp sp3.pero no puedo obtener un helloworld.dll, pero hay un helloword.pyd y una carpeta de compilación.esto es, quiero saber por qué no dll llenar – ljx0517

+0

[pyd = dll con funciones de Python] (http://stackoverflow.com/a/11797037/819417) –

3

Is a *.pyd file the same as a DLL?

Sí, los archivos .pyd son DLL, pero hay algunas diferencias Si tiene tiene un archivo DLL llamado foo.pyd, entonces debe tener una función PyInit_foo(). Puede escribir Python "import foo", y Python buscará foo.pyd (así como foo.py, foo.pyc) y si lo encuentra, intentará para llamar al PyInit_foo() para inicializarlo. No vincula su .exe con foo.lib, ya que eso haría que Windows requiriera que la DLL estuviera presente.

Tenga en cuenta que la ruta de búsqueda de foo.pyd es PYTHONPATH, no es lo mismo que la ruta que usa Windows para buscar foo.dll. Además, foo.pyd necesita no estar presente para ejecutar su programa, mientras que si vinculó su programa con un dll, se requiere dll. Por supuesto, se requiere foo.pyd si quiere decir import foo. En una DLL, el enlace se declara en el código fuente con __declspec(dllexport). En un .pyd, el enlace se define en una lista de funciones disponibles.

Modifying Python’s Search Path, Absolute and Relative Imports

Cuestiones relacionadas