Ответ 1
После некоторых экспериментов я нашел решение.
-
Создайте отдельную папку
source
в основной папке приложения. Здесь будут размещены исходные файлы. Также поместите файл__init__.py
в папку. Позволяет назвать основной файл, напримерmain_module.py
. -
Добавьте все его содержимое в виде файлов данных в конфигурацию py2exe
setup.py
. Теперь после компиляции программы эти файлы будут помещены в папку dist.data_files += [('source', glob('source/*.py'),)] setup( data_files=data_files, .... # other options windows=[ { "script": "launcher.py", "icon_resources": [(0, "resources/favicon.ico")] } )
-
Сделать
launcher.py
- задача состоит в том, чтобы импортировать все системные и требуемые библиотеки, такие как pygame, pyqt и т.д. Затем запустите программу:import sys, time, os, hashlib, atexit # std modules import PyQt5, ... # foreign libraries sys.path.insert(0, 'source') exec('import main_module')
-
Теперь
main_module.py
будет импортирован, если он импортирует ваши модули, они также будут импортированы в своих местах в иерархии. Например, главаmain_module.py
может быть таким:import user_tweaks from user_data import parser
Эти файлы
user_tweaks.py
иuser_data.py
должны находиться в папкеsource
на соответствующих путях относительноmain_module.py
.
Вы можете изменить содержимое папки source
без самой программы перекомпиляции. В любой программе времени она использует новое содержимое source
.
В результате у вас есть папка приложения с:
- Отдельная пусковая установка - простой .exe файл
- Все необходимые модули
- Ваше приложение со всеми его модулями.