Pregunta

Rápida uno hoy: Estoy aprendiendo fuera de la de y en la biblioteca de pitones distutils, y me gustaría incluir un módulo de extensión de Python (.pyd) con mi paquete. Sé, por supuesto, que la forma recomendada es tener distutils compilar la extensión en el momento en que se crea el paquete, pero esto es una extensión bastante complejo que abarca muchos archivos de código fuente y hacer referencia a varias librerías externas de tal modo que va a tomar un poco de juego importante para conseguir todo funcionando bien.

Mientras tanto tengo un conocido acumulación de trabajo de la extensión que sale de Visual Studio, y me gustaría usarlo en el instalador como una solución temporal para permitir que me centre en otras cuestiones. No puedo especificar como un módulo, sin embargo, ya que los parecer debe tener una extensión .py explícita. ¿Cómo podría indicar en mi setup.py que quiero incluir un módulo de extensión pre-compilados?

(Python 3.1, si importa)

¿Fue útil?

Otros consejos

He resuelto esto Extension.build_extension anulando:

setup_args = { ... }
if platform.system() == 'Windows':
    class my_build_ext(build_ext):
        def build_extension(self, ext):
            ''' Copies the already-compiled pyd
            '''
            import shutil
            import os.path
            try:
                os.makedirs(os.path.dirname(self.get_ext_fullpath(ext.name)))
            except WindowsError, e:
                if e.winerror != 183: # already exists
                    raise


            shutil.copyfile(os.path.join(this_dir, r'..\..\bin\Python%d%d\my.pyd' % sys.version_info[0:2]), self.get_ext_fullpath(ext.name))

    setup_args['cmdclass'] = {'build_ext': my_build_ext }

setup(**setup_args)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top