Я пытаюсь создать exe-файл с помощью PyInstaller (режим одного файла). Моя программа представляет собой один файл (используяTry.py). Это очень простой файл, который создает экземпляр класса «TrySystem» из файла яйца, который я создал. Класс «TrySystem» загружает файл XRC и помещает в него растровую кнопку с помощью wxPython. XRC и файлы изображений сохраняются как внутренние ресурсы яйца, как описано в Управление ресурсами в проект Python
Я готовлю свое яйцо на Mac (10.8.5):
sudo python setup.py bdist_egg
Затем я копирую его на машину с WinXP (на самом деле он работает на том же компьютере, что и виртуальная машина) и устанавливаю:
easy_install Try\try2\dist\try3-1.0-py2.7.egg
Когда я затем пытаюсь запустить «python usingTry.py» из терминала Python (в WinXP), все работает нормально, и я вижу рамку и кнопку. Затем я готовлю исполняемый файл из файла «usingTry.py» (в WinXP):
Try\users\usingTry>pyinstaller.py -F usingTry.py
И затем я пытаюсь запустить его:
Try\users\usingTry>dist\usingTry.exe
Traceback (most recent call last):
File "<string>", line 11, in <module>
File "<string>", line 4, in __init__
File "z:\Documents\workspace\python\Try\users\usingTry\build\pyi.win32\usingTry\out00-PYZ.pyz\try3", line 35, in __init__
File "z:\Documents\workspace\python\Try\users\usingTry\build\pyi.win32\usingTry\out00-PYZ.pyz\try3", line 8, in __init__
File "z:\Documents\workspace\python\Try\users\usingTry\build\pyi.win32\usingTry\out00-PYZ.pyz\wx._core", line 7981, in __init__
File "z:\Documents\workspace\python\Try\users\usingTry\build\pyi.win32\usingTry\out00-PYZ.pyz\wx._core", line 7555, in _BootstrapApp
File "z:\Documents\workspace\python\Try\users\usingTry\build\pyi.win32\usingTry\out00-PYZ.pyz\try3", line 14, in OnInit
File "z:\Documents\workspace\python\Try\users\usingTry\build\pyi.win32\usingTry\out00-PYZ.pyz\pkg_resources", line 868, in resource_filename
File "z:\Documents\workspace\python\Try\users\usingTry\build\pyi.win32\usingTry\out00-PYZ.pyz\pkg_resources", line 181, in get_provider
File "c:\programs\pyinstaller-2.0\PyInstaller\loader\iu.py", line 409, in importHook
raise ImportError("No module named %s" % fqname)
ImportError: No module named try3.resources
Кто-нибудь знает, как это решить? В этой ссылке находится zip-файл со всем:
try.zip:
Try/
try2/ (this is the code that creates the egg)
setup.py
ez_setup.py
try3/ (the egg's code)
__init__.py
resources/ (here are the resource files used in the egg)
__init__.py
main.xrc
stopButton.png
build/
... (files created while I built the egg)
dist/
try3-1.0-py2.7.egg (the prepared egg file)
try3.egg-info/
...
users/
usingTry/ (here is the code that uses the egg file)
usingTry.py
usingTry.spec
dist/
usingTry.exe (created by "pyinstaller -F usingTry.py")
try3/ (I manually copied it here from Try/try2/ so the exe file works)
build/ (created by PyInstaller)
...
logdict2.7.5.final.0-1 (created by PyInstaller)
Вы заметите, что папка Try\try2\try3 (которая содержит код яйца) была вручную скопирована туда, где находится созданный исполняемый файл (Try\users\usingTry\dist). Это потому, что он заставляет exe-файл работать. Я нашел этот обходной путь в сгенерированный PyInstaller exe-файл не работает, проект использует ReportLab а>
Что я хотел бы сделать, так это избежать этого обходного пути, и все будет просто работать. Это должно быть что-то очень простое, поскольку на веб-сайте PyInstaller заявлено, что они полностью поддерживают использование файлов egg.