Python: tkinter. mysql, fitz и создание *.exe
Желание получить *.exe из Python привело к проблемам, описанным здесь и здесь.
Понимаю невозможность дать ответ на вопросы такого типа, опишу свое понимание того, как из Python-кода нужно получать exe файл. Может укажете на концептуальные промахи. Итак:
Доводим код до рабочего состояния. Проверяем как минимум запускаемость кода на всех ветках меню.
Выписываем все импортируемые модули (conda installed & pip installed)
Указываем путь tkinter dll(s) для ручного включения в копируемые файлы. Тут я не знаю - что делать с моим mysql connect?
Передаем все в скрипт и ждем пока создастся.
Запускаю - на секунду мелькает черное окно и все закрывается без слов.
Ну вот и код:'''Imports are automatically detected (normally) in the script to freeze ))) ''' cx_Freeze.setup( name="Name_1st_exe", description='My Hello World App!', options={ "build_exe": { "packages": [ "tkinter", "matplotlib", "functools", "json", "time", "datetime", "pathlib", "PIL", "winsound", "mysql", "PyPDF2", "fitz", 'numpy', 'collections', 'requests', 'pprint', 'abc', ], "include_files": [ r"D:\OD\OneDrive\PyCodes\AnaPy\ICO\python-powered-h-140x182.ico", r"D:\Games\Anaconda\envs\postman\Library\bin\tcl86t.dll", r"D:\Games\Anaconda\envs\postman\Library\bin\tk86t.dll", # может, что то еще? ], 'include_msvcr': True, } }, version="0.2", executables=executables)
Могу добавить, что сборка делается на 10й винде для запуска на 10й винде.
Python = 3.9.7 все из под Anaconda.
Приходилось использовать conda install some_modules -c conda-forge.
Желанное меню tkinter увидеть так и не удалось )
Возможно проблема с желанием использовать MySQL в сборке, ну или модуль абстракных классов abc . Был бы признателен, если кто поделится опытом создания таких сборок.
Ответы (1 шт):
У меня была похожая проблема при конвертации через pyinstaller. Cкрипт ссылался на дополнительные исполняемые файлы при работе. Я решил это так:
В самом скрипте прописать относительный путь к исполняемым файлам пример -
parent_dir = path.dirname(path.abspath(__file__))Запустить pyinstaller из командной строки с атрибутом --onefile
pyinstaller --onefile my_script.pyВ файле my_script.spec(создается автоматически при первом запуске pyinstaller) нужно указать:
a = Analysis(['my_script.py'], pathex=['C:\\project\\my_script.py'], binaries=[ ('C:\\project\\dir_file\\file.exe', '.\\dir_file\\file.exe') ], datas=None,Запустить pyinstaller из командной строки с указанием файла конфигурации
pyinstaller myscript.spec my_script.py
Решил основываясь на данном ответе https://stackoverflow.com/questions/39563851/how-to-include-chromedriver-with-pyinstaller