EXE сгенерированный с py2exe не может найти pywinauto - PullRequest
1 голос
/ 28 января 2010

Я пытался упаковать свое приложение с 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 голос
/ 28 января 2010

По моему опыту, 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.

...