python - tutorial - visual studio py2exe




Einschließen von PYDs/DLLs in py2exe-Builds (3)

Eines der Module für meine App verwendet Funktionen aus einer .pyd-Datei. Es gibt eine Option zum Ausschließen von dlls (exclude_dlls), aber gibt es eine Möglichkeit, sie einzubinden? Der Build-Prozess scheint die .pyd-Datei in meinem Modul nicht zu kopieren, obwohl der Rest der Dateien (.py) kopiert wurde. Ich muss auch eine DLL einschließen. Wie erhalte ich py2exe um sowohl .pyd als auch .dll Dateien einzuschließen?


Sie können das Setup-Skript ändern, um die Dateien explizit zu kopieren:

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 ... ändern Sie natürlich, um Ihren Bedürfnissen zu entsprechen.


Wenn sie nicht automatisch erkannt werden, versuchen Sie, sie manuell in das temporäre Build-Verzeichnis von py2exe zu kopieren. Sie werden in der endgültigen ausführbaren Datei enthalten sein.


.pyds und .DLLs sind hier anders, da ein .pyd automatisch von modulefinder gefunden werden sollte und so enthalten ist (solange Sie die entsprechende "import" -Anweisung haben), ohne etwas tun zu müssen. Wenn einer verpasst wird, tun Sie dasselbe, als ob eine .py-Datei übersehen wurde (sie sind beide nur Module): Verwenden Sie die Option "include" für die py2exe-Optionen.

Modulfinder wird nicht unbedingt Abhängigkeiten von .DLLs finden (py2exe kann einige erkennen), daher müssen Sie diese möglicherweise explizit mit der Option 'data_files' hinzufügen.

Zum Beispiel, wo Sie zwei .DLL ('foo.dll' und 'bar.dll') enthalten und drei .pyd's ('module1.pyd', 'module2.pyd' und 'module3.pyd') to einschließen:

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






pyd