Pyinstaller, но сохраняет обновления файлов .py
-
27-10-2019 - |
Вопрос
Мне удалось упаковать свое приложение PYQT4 в качестве «автономного» приложения на Windows, оно работает.
Однако это приложение может обновляться, что выполняется путем замены фактического кода, написанного мной (.py Files) на новые версии, загруженные через Интернет.
Как я могу сказать Pyinstaller сделать свою работу (собирая DLL, создавая пусковую установку с блестящим значком и т. Д.), Но пусть файлы .py нетронуты?
Мне нужны эти файлы непосредственно на диске, чтобы автоматическая обстановка работала.
Решение
Вы можете изменить файл спецификации, чтобы специально не включать файлы по имени (при строительстве), а затем убедитесь, что эти файлы включены - я должен был проверить, есть ли возможность включать, но не компиляцию.
Я не пробовал это сам (я использую Pyinstaller на работе, но не настраиваю его на своем домашнем компьютере), но это то, что, я думаю, должно быть в порядке:
a = Analysis(['main.py'])
excluded = ['myfile0.py', 'myfile1.py', 'myfile2.py']
a.scripts = [script from script in a.scripts if script not in excluded]
pyz = PYZ(a.pure)
exe = EXE(a.scripts, pyz, name="main.exe", exclude_binaries=1)
dist = COLLECT(exe, a.binaries, excluded, name="dist")
Другие советы
На самом деле это больше похоже на это:
a = Analysis(['main.py'])
excluded = ['pathto\\myfile0.py', 'pathto\\myfile1.py', 'pathto\\myfile2.py']
a.scripts = [script from script in a.scripts if script[1] not in excluded]
pyz = PYZ(a.pure)
excluded_files_collect = [(f.split('\\')[-1],f,'DATA') for f in excluded]
exe = EXE(a.scripts, pyz, name="main.exe", exclude_binaries=1)
dist = COLLECT(exe, a.binaries, excluded_files_collect , name="dist")
Поскольку сценарий на самом деле является кортежей с формой:
('myfile0.py', 'pathto\\myfile0.py', 'PYSOURCE')
Возможно, вам также придется предотвратить включение файлов в PYZ, обратитесь к PYZ TOC, чтобы увидеть, если они включены, мне удалось придать их, используя excudes = [myFile0] в анализе ().
Я думаю, что встроенный интерпретатор в исполняемом файле все равно будет искать файлы .py в том же каталоге и/или Pythonpath, Py2exe использует zip -файл для нативных компонентов Python, IIRC Pyinstaller внедряет их в исполняемое, возможно, есть вариант Держите zip, как в py2exe (или не добавьте их в спецификацию), затем попробуйте запустить приложение без файлов и отслеживать доступ к файлам с помощью Procmon.
Pyinstaller предоставляет --исключать Опция для вашего варианта использования, и также можно установить модуль или пакет, который вы хотите игнорировать, используя excludes
параметр Analysis()
в .spec
файл .