2008-10-21 13 views
9

Uno de los módulos para mi aplicación usa funciones de un archivo .pyd. Hay una opción para excluir dlls (exclude_dlls) pero ¿hay alguna para incluirlos? El proceso de compilación no parece copiar el .pyd en mi módulo a pesar de copiar el resto de los archivos (.py). También necesito incluir un .dll. ¿Cómo hago para que py2exe incluya archivos .pyd y .dll?Incluyendo PYDs/DLL en compilaciones py2exe

Respuesta

2

Si no se detectan automáticamente, intente copiarlos manualmente en el directorio de compilación temporal de py2exe. Se incluirán en el ejecutable final.

+0

Sí, pero lo ideal es que debe ser parte de la secuencia de comandos setup.py o poner en mi archivo por lotes para crear el ejecutable. – TheObserver

2

Puede modificar el script de configuración para copiar los archivos de forma explícita:

script = "PyInvaders.py"  #name of starting .PY 
project_name = os.path.splitext(os.path.split(script)[1])[0] 
setup(name=project_name, scripts=[script]) #this installs the program 

#also need to hand copy the extra files here 
def installfile(name): 
    dst = os.path.join('dist', project_name) 
    print 'copying', name, '->', dst 
    if os.path.isdir(name): 
    dst = os.path.join(dst, name) 
    if os.path.isdir(dst): 
     shutil.rmtree(dst) 
    shutil.copytree(name, dst) 
    elif os.path.isfile(name): 
    shutil.copy(name, dst) 
    else: 
    print 'Warning, %s not found' % name 

pygamedir = os.path.split(pygame.base.__file__)[0] 
installfile(os.path.join(pygamedir, pygame.font.get_default_font())) 
installfile(os.path.join(pygamedir, 'pygame_icon.bmp')) 
for data in extra_data: 
    installfile(data) 

etc ... modificar para que se adapte a sus necesidades, por supuesto.

2

Tal vez usted podría utilizar la opción de configurar data_files():

import glob 
setup(name='MyApp', 
     # other options, 
     data_files=[('.', glob.glob('*.dll')), 
        ('.', glob.glob('*.pyd'))], 
    ) 

data_files debe ser una lista de tuplas, donde cada tupla contiene:

  1. El directorio de destino.
  2. Una lista de archivos para copiar.

Esto no va a poner los archivos en library.zip, que no debería ser un problema para los archivos DLL, pero no sé acerca de los archivos PYD.

11

.pyd's y .DLL son diferentes aquí, en el sentido de que un .pyd debe ser encontrado automáticamente por el buscador del módulo y así se incluye (siempre que tenga la declaración de "importación" apropiada) sin necesidad de hacer nada. Si se pierde uno, usted hace lo mismo que si se omitiera un archivo .py (ambos son solo módulos): use la opción "incluir" para las opciones de py2exe.

Modulefinder no encontrará necesariamente dependencias en .DLLs (py2exe puede detectar algunas), por lo que puede necesitar incluirlas explícitamente, con la opción 'data_files'.

Por ejemplo, en la que tuvo dos ('foo.dll' y 'bar.dll') de .DLL para incluir, y tres de .pyd ('module1.pyd', 'module2.pyd', y 'Module3. PYD ') para incluir:

setup(name='App', 
     # other options, 
     data_files=[('.', 'foo.dll'), ('.', 'bar.dll')], 
     options = {"py2exe" : {"includes" : "module1,module2,module3"}} 
    ) 
+2

En la versión actual de py2exe, data_files debe verse así: data_files = [(DIR, [FILE, FILE, FILE]), ...] –

+3

Cuando hago esto, necesito usar "incluye" en lugar de "incluir "o py2exe se queja. – talljosh

+0

Tengo el mismo problema para encontrar archivos pyd y ya he intentado incluir el recurso faltante, pero py2exe todavía no pudo encontrarlo. –