python3 - Distribuir el módulo de extensión de Python precompilado con distutils
python setuptools python3 (3)
Intente usar package_data: http://docs.python.org/distutils/setupscript#installing-package-data
Una rápida hoy: estoy aprendiendo las bibliotecas de entradas y salidas de Pythons, y me gustaría incluir un módulo de extensión de python (.pyd) en mi paquete. Sé que, por supuesto, la forma recomendada es hacer que los compiladores de datos compilen la extensión en el momento en que se crea el paquete, pero esta es una extensión bastante compleja que abarca muchos archivos de origen y hace referencia a varias bibliotecas externas, por lo que se requerirá una reproducción significativa para obtener todo. trabajando bien
Mientras tanto, tengo una versión de trabajo conocida de la extensión que sale de Visual Studio y me gustaría usarla en el instalador como una solución temporal que me permita concentrarme en otros problemas. Sin embargo, no puedo especificarlo como un módulo, ya que aparentemente deben tener una extensión .py explícita. ¿Cómo podría indicar en mi setup.py que deseo incluir un módulo de extensión precompilado?
(Python 3.1, si importa)
Probar una plantilla de manifiesto:
http://docs.python.org/distutils/sourcedist.html#specifying-the-files-to-distribute
Resolví esto anulando Extension.build_extension:
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)