2016-05-12 142 views
1

我有開始喜歡這個有很多進口腳本的問題:導入錯誤:沒有模塊命名公共 - 與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 

我與py2exe大量努力甚至讓一個可執行文件。我終於用下面的安裝腳本管理它(其中大部分只是從類似的問題複製和粘貼,並建議在stackoverflow)。

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"] } }) 

我確定我的腳本不雅。它有三個連接的定義函數和一個最終輸出。

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

當我運行該文件,我得到一個錯誤:

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 

如果任何人都可以做的這一切任何意義,讓我的.exe文件運行時,我將是有史以來不勝感激!

回答

0

由於問題中沒有可測試的代碼,我不能保證這會解決您的問題,但我可以解釋爲什麼會出現此錯誤。這是因爲py2exe未將reportlab.graphics.barcode.common捆綁到您的.exe中。

我怎麼知道這一點,我也跟着回溯,看看有什麼ReportLab的在rl_exec呼叫在做,原來是讓使用exec此調用:

from reportlab.graphics.barcode.common import I2of5 

但因爲進口只是做動態py2exe不知道這個包的需要。

那麼你如何解決它?只需將'reportlab.graphics.barcode.common'添加到您的軟件包列表中,這應該有助於py2exe找到它正在尋找的模塊。

+0

乾杯B8vrede。這似乎解決了這個特定的錯誤,但我只是另一個錯誤,作爲reportlab軟件包的一部分,另一個缺失的模塊。我能做些什麼來導入所有必要的模塊? –

+0

我認爲你的情況最好的辦法是確保你的導入是特定的,所以不是'從reportlab.graphics導入形狀',而是'從reportlab.graphics.shapes導入繪圖'(或任何你需要的形狀)。這可以防止加載所有不必要的類,這些類都有可能導致導入錯誤的依賴關係。 – B8vrede

+0

我會試試看。我導入包pylabels(https://github.com/bcbnz/pylabels),所以我希望沒有任何內容導入可能導致問題的函數。 –

相關問題