Py2exe mit zope.interface arbeiten

Ich habe eine Python App auf Twisted und PyGTK basiert. Twisted selbst hängt von zope.interface ab, und ich importiere es nicht direkt.

Leider, wenn ich versuche, meine App auszuführen, endet der folgende Fehler im Fehlerprotokoll:

Traceback (most recent call last): File "tasks.py", line 4, in <module> File "ui\__init__.pyc", line 14, in <module> File "twisted\python\log.pyc", line 17, in <module> ImportError: No module named zope.interface Traceback (most recent call last): File "tasks.py", line 4, in <module> File "ui\__init__.pyc", line 14, in <module> File "twisted\python\log.pyc", line 17, in <module> ImportError: No module named zope.interface Traceback (most recent call last): File "tasks.py", line 4, in <module> File "ui\__init__.pyc", line 14, in <module> File "twisted\python\log.pyc", line 17, in <module> ImportError: No module named zope.interface 

Ich habe versucht, jede Kombination von zope.interface und zope zu INCLUDES und PACKAGES , aber dies nur gibt mir diese Build Zeit Fehler:

 running py2exe *** searching for required modules *** C:\Python26\lib\site-packages\py2exe\build_exe.py:16: DeprecationWarning: the sets module is deprecated import sets Traceback (most recent call last): File "setup.py", line 75, in <module> 'gtk/*.ui' File "C:\Python26\lib\distutils\core.py", line 152, in setup dist.run_commands() File "C:\Python26\lib\distutils\dist.py", line 975, in run_commands self.run_command(cmd) File "C:\Python26\lib\distutils\dist.py", line 995, in run_command cmd_obj.run() File "C:\Python26\lib\site-packages\py2exe\build_exe.py", line 243, in run self._run() File "C:\Python26\lib\site-packages\py2exe\build_exe.py", line 296, in _run self.find_needed_modules(mf, required_files, required_modules) File "C:\Python26\lib\site-packages\py2exe\build_exe.py", line 1306, in find_needed_modules mf.import_hook(f) File "C:\Python26\lib\site-packages\py2exe\mf.py", line 719, in import_hook return Base.import_hook(self,name,caller,fromlist,level) File "C:\Python26\lib\site-packages\py2exe\mf.py", line 136, in import_hook q, tail = self.find_head_package(parent, name) File "C:\Python26\lib\site-packages\py2exe\mf.py", line 204, in find_head_package raise ImportError, "No module named " + qname ImportError: No module named zope 

Meine setup.py ist:

 from distutils.core import setup import py2exe def find_data_files(source,target,patterns): # I've elided this, I doubt it's relevant to the problem # ... INCLUDES = [ 'cairo', 'pango', 'pangocairo', 'atk', 'gobject', 'gio', ] PACKAGES = [ 'encodings', ] setup( name = 'MyApp', description = 'My Application', version = '1.0', windows = [ { 'script': os.path.join('ui','tasks.py'), 'icon_resources': [ (1, os.path.join( 'ui','data','iconpack.ico')) ], } ], options = { 'py2exe': { 'packages': ','.join(PACKAGES), 'includes': ','.join(INCLUDES), } }, data_files = find_data_files( 'ui', 'ui', [ 'data/*', 'gtk/*.ui' ]) ) 

Wie bekomme ich py2exe?

    3 Solutions collect form web for “Py2exe mit zope.interface arbeiten”

    Ich habe das gleiche Problem mit zope.interface und Freunden (zope.component, et al). Speziell ist es ein Problem, wie py2exe sucht und entdeckt Pakete und wie die zope Pakete installiert sind.

    zope ist ein Namespace-Paket und beruht daher auf einer funky-Import-Logik in es ist .pth Dateien (siehe zope.interface-3.*.*-py2.*-nspkg.pth ), um die zope.interface-3.*.*-py2.*-nspkg.pth hinzuzufügen Pfad. Schauen Sie sich das in den site-packages und Sie werden sehen, was ich meine.

    py2exe hat Probleme, diese Art von Paket zu entdecken.

    Am Ende, was ich tat, war manuell verpacken die verschiedenen zope Pakete, die ich in einem Stardard-Modul-Setup in site-packages und dann reran py2exe – die dann entdeckte alles kein Problem. Es ist ein PITA, aber bis py2exe in der Lage ist, Verpackungsrandfälle zu behandeln und / oder die zope Pakete sind in einer py2exe freundlichen Mode verpackt, es geht um das Beste, was Sie tun können.

    Ich weiß nicht, ob du das jemals gelöst hast, oder wenn es dir noch einmal mehr wichtig ist, aber für zukünftige Sucher, fand ich einen einfachen Weg, um das Zope-Importproblem hier zu reparieren.

    Speziell fügen __init__.py dem PYTHONDIR/Lib/site-packages/zope eine leere Datei PYTHONDIR/Lib/site-packages/zope .

    Ich habe dies mit einer twisted Anwendung getestet, mit dieser Setup-Datei:

     #!/usr/bin/env python ''' File: setup.py Author: Spencer Rathbun Date: 07/24/2012 Description: Setup file for py2exe, converts client python script into executable. ''' from distutils.core import setup import py2exe INCLUDES = [ '' ] PACKAGES = [ 'twisted' ] setup( name = 'client', description = '', version = '1.0', console = [ {"script":"client.py", "icon_resources":[ (1, "c:\python27\DLLs\py.ico") ] } ], zipfile = None, options = {"py2exe": {"compressed": 1, "optimize": 1, "ascii": 0, "bundle_files": 1, "packages": ','.join(PACKAGES), "includes": ','.join(INCLUDES), } } ) 

    Py2exe kann dies verwenden, um erfolgreich eine ausführbare Datei für Twisted jetzt zu erstellen, da es von zope abhängt.

    Ich war vor diesem Problem bei der Erstellung eines Pakets mit py2exe in Windows XP SP3. Ich habe herausgefunden, dass py2exe die Abhängigkeiten nicht richtig ermittelt hat.

    Um dieses Problem zu lösen, habe ich mein Drittpaket (e) deinstalliert und mit dem folgenden Befehl easy_install installiert

    easy_install -Z <your_package_name>

    Die Option -Z entpackt die Paketdetails und damit der Inhalt nicht komprimiert. Wenn Sie jetzt py2exe ausführen, werden die Abhängigkeiten korrekt erkannt.

    Hoffe das hilft!

    Python ist die beste Programmiersprache der Welt.