用py2exe生成的exe找不到pywinauto

时间:2010-01-28 18:25:48

标签: python py2exe

我一直在尝试用py2exe打包我的应用程序。该应用程序工作正常,但它一直无法找到/使​​用pywinauto。我一直在谷歌上搜索,但我什么都没得到,我现在已经完全迷失了......

这是包装脚本:

from distutils.core import setup

setup(
  windows = ["mainForm.py"],
  data_files=[
      ('', ['mainForm.ui']),
      ('', ['osk.sqlite'])
  ],
  options = {
              "py2exe":{
                        "optimize": 2,
                        "includes": [
                          'sip', 'pyttsx.drivers.sapi5', 'win32com', 'xml.etree.ElementTree', 'sqlite3',
                          'pywinauto', 'pywinauto.application', 'pywinauto.controls', 'pywinauto.tests', 'SendKeys'
                            ],
                          "typelibs": [('{C866CA3A-32F7-11D2-9602-00C04F8EE628}', 0, 5, 0)]
                         }
              }
    )

这是运行exe

时的输出
Traceback (most recent call last):
  File "mainForm.py", line 129, in changeState
  File "mainForm.py", line 230, in setWriteMode
  File "mainForm.py", line 105, in FillApps
  File "WindowHandler.pyo", line 26, in getWindowList
NameError: global name 'pywinauto' is not defined

我希望有人能指出我的正确方向。

提前致谢

1 个答案:

答案 0 :(得分:1)

根据我的经验,py2exe以奇怪的方式处理导入。有时它无法找到链接导入(例如导入WindowHandler,导入pywinauto)。

我将从 mainForm.py

开始
import sys
import WordOps 
import Voice 
import WindowHandler
from PyQt import QtCore, QtGui, uic

setup.py 中,从此开始:

options={'py2exe':{
                    'includes': ['sip'],
                    'bundle_files': 1
                  }
        }

在编译到exe之前确保您的程序正常工作,然后尝试运行setup.py。 当您在运行setup.py时(如您发布的那个)开始收到错误,请向 mainForm.py 添加更多导入。因此,对于该错误,您的新标题将如下所示:

import sys
import WordOps 
import Voice 
import WindowHandler
from PyQt import QtCore, QtGui, uic
# imports for py2exe
import pywinauto

它不会破坏您的代码,因为它只是一个“未使用”的导入。 继续这样做,直到setup.py工作。