2016-05-12 22 views
1

ich ein Skript, das mit vielen Importen wie folgt beginnt:Import Fehler: Keine Modul namens Gemeinsame - Probleme mit py2exe

from reportlab.graphics import shapes 
from reportlab.lib.utils import ImageReader 
from reportlab.graphics import barcode 
from reportlab.lib.units import mm 
from reportlab.pdfbase.pdfmetrics import stringWidth 
import reportlab.rl_settings 
import PIL 
from cStringIO import StringIO 
import labels 
import pyodbc 
import pandas 
from os.path import expanduser 
from time import sleep 
import sys 

ich massiv mit py2exe kämpfte, um selbst eine ausführbare Datei. Ich habe es schließlich mit dem folgenden Setup-Skript geschafft (das meiste davon wird nur von ähnlichen Problemen kopiert und eingefügt und schlägt auf Stackoverflow vor).

from distutils.core import setup 
import distutils 
import py2exe 
import sys 
import zmq 
import os 

sys.setrecursionlimit(5000) 

distutils.core.setup(
    options = { 
     "py2exe": { 
      "dll_excludes": ["MSVCP90.dll"] 
     } 
    }, 
) 

sys.path.append('C:\\WINDOWS\\WinSxS\\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2') 

packages=[ 
    'reportlab', 
    'reportlab.graphics' 
    'reportlab.lib.utils' 
    'reportlab.rl_settings' 
    'reportlab.lib.units' 
    'reportlabl.pdfbase.pdfmetrics', 

], 

os.environ["PATH"] = \ 
    os.environ["PATH"] + \ 
    os.path.pathsep + os.path.split(zmq.__file__)[0] 

setup(console=[{"script": "working.py"}], 
     options={ 
      "py2exe": { 
       "includes": 
       ["zmq.utils", "zmq.utils.jsonapi", 
       "zmq.utils.strtypes"] } }) 

Ich bin sicher, mein Skript ist unelegant. Es hat drei zusammenhängende Definierfunktionen und einen Endausgang.

try: 
    makeyourlabels() 
except: 
    Print "Sorry, something went wrong." 

Ich erhalte eine Fehlermeldung, wenn ich die Datei ausführen:

Traceback (most recent call last): 
    File "working.py", line 3, in <module> 
    File "reportlab\graphics\barcode\__init__.pyc", line 72, in <module> 
    File "reportlab\graphics\barcode\__init__.pyc", line 42, in _reset 
    File "reportlab\graphics\barcode\widgets.pyc", line 162, in <module> 
    File "reportlab\graphics\barcode\widgets.pyc", line 95, in _BCW 
    File "reportlab\lib\utils.pyc", line 243, in rl_exec 
    File "<string>", line 1, in <module> 
    File "<string>", line 1, in <module> 
ImportError: No module named common 

Wenn jemand einen Sinn für alles machen kann und meine Exe zum Laufen bringen, würde ich immer dankbar!

Antwort

0

Da es keinen testbaren Code in der Frage gibt, kann ich nicht garantieren, dass dies Ihr Problem beheben wird, aber ich kann erklären, warum Sie diesen Fehler erhalten. Es ist, weil py2exereportlab.graphics.barcode.common in Ihrer EXE nicht bündelte.

Wie weiß ich, ich die Zurückverfolgungs gefolgt, um zu sehen, was Reportlab wurde in der rl_exec Anruf tut, stellt sich heraus, es ist, diesen Aufruf exec mit machen:

from reportlab.graphics.barcode.common import I2of5 

Aber weil der Import nur getan dynamisch py2exe weiß nicht über die Notwendigkeit für dieses Paket.

Also, wie reparieren Sie es? Fügen Sie einfach 'reportlab.graphics.barcode.common' zu Ihrer Paketliste hinzu, damit py2exe das gewünschte Modul finden kann.

+0

Cheers B8vrede. Das scheint diesen speziellen Fehler gelöst zu haben, aber ich bekomme nur einen weiteren Fehler mit einem anderen fehlenden Modul als Teil des Reportlab-Pakets. Gibt es etwas, was ich tun kann, um alle notwendigen Module zu importieren? –

+0

Ich denke, das beste für Ihren Fall ist, um sicherzustellen, dass Ihre Importe spezifisch sind, also nicht von reportlab.graphics Formen importieren, sondern von reportlab.graphics.shapes Zeichnungen importieren (oder was auch immer Sie von Shapes benötigen). Dies verhindert das Laden aller Arten unnötiger Klassen, die alle Abhängigkeiten aufweisen, die zu Importfehlern führen können. – B8vrede

+0

Ich werde es versuchen. Ich importiere das Paket pylabels (https://github.com/bcbnz/pylabels), also hoffe ich, dass es dort nichts gibt, das Funktionen importiert, die Probleme verursachen könnten. –