使用py2exe生成的exe无法找到pywinauto
我一直在尝试用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 个回答
1
根据我的经验,py2exe处理导入的方式有点奇怪。有时候它找不到相关的导入(比如你导入了WindowHandler
,而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能正常工作为止。