А начиналось все с GUI-приложения
Как-то понадобилось мне в приложении делать автоматизированную работу с внешними программами, а конкретно с Adobe Reader. Задача в следующем. При выполнении поиска в Python-приложении (то есть, вводим текст в wxPython GUI) - открывать PDF-файл с помощью Adobe Reader, да не просто открывать, а так, чтобы в строке поиска уже было введено слово, по которому ищется информация, а сам PDF-документ был открыт на первом найденном результате. Ко всему прочему приложение распространяется под Windows-платформы, исполняемые файлы создаются с помощью py2exe.
Но потребовалась некоторая автоматизация действий пользователя
Для решения этой задачи был выбран pywinauto - замечательная библиотека для тестирования GUI-приложений. И хотя в данном случае никакого тестирования нет, с автоматизацией она тоже справляется на ура.
И тут в чудесный мир Python врывается exe-формат
Все отлично отрабатывает, если запускать python скрипт. Проблемы возникают в случае, когда запускается это же приложение собранное с помощью py2exe.
Спасибо py2exe за его чудесную функцию ведения лога. В логе можно увидеть примерно следующее:
Traceback (most recent call last):File "autorun.py", line 3, infrom gui.wxmain import SplashWindowFile "zipextimporter.pyc", line 82, in load_moduleFile "gui\wxmain.pyc", line 11, inSplash windowFile "zipextimporter.pyc", line 82, in load_moduleFile "pywinauto\__init__.pyc", line 28, inFile "zipextimporter.pyc", line 82, in load_moduleFile "pywinauto\findwindows.pyc", line 37, inFile "zipextimporter.pyc", line 82, in load_moduleFile "pywinauto\controls\__init__.pyc", line 33, inFile "zipextimporter.pyc", line 82, in load_moduleFile "pywinauto\controls\win32_controls.pyc", line 37, inFile "zipextimporter.pyc", line 82, in load_moduleFile "pywinauto\tests\__init__.pyc", line 153, inFile "pywinauto\tests\__init__.pyc", line 137, in __init_testsImportError: No module named allcontrols
Решаем проблему
Как видим, существует проблема с импортами в тестах. Проблема решается очень просто. Заходим в c:\Python<версия>\Lib\site-packages\pywinauto\tests\, открываем замечательный файлик __init__.py и комментируем все строки, которые хоть каким-то боком что-то импортируем (с целью экономии глаз и нервов читателя, полный код модуля приводить не буду). Собираем еще раз исполняемый exe-файл, и все работает.
P.S
Проблема у меня возникла в pywinauto при версии Python 2.6. Возможно, в других версиях такой проблемы и не будет.
В новой версии pywinauto 0.5.0 этой проблемы больше нет.
ОтветитьУдалитьПроект переехал на GitHub: http://pywinauto.github.io/