PyInstaller, но с возможностью обновления файлов .py - PullRequest
7 голосов
/ 20 марта 2011

Мне удалось упаковать мое приложение PyQt4 как «автономное» приложение для Windows, оно работает.

Однако это приложение может само обновляться, что происходит путем замены фактически написанного мной кода (файлы .py) новыми версиями, загруженными через Интернет.

Как я могу сказать, что PyInstaller выполняет свою работу (собирает библиотеки DLL, генерирует панель запуска с блестящим значком и т. Д.), НО оставляет файлы .py нетронутыми?

Мне нужны эти файлы непосредственно на диске, чтобы автообновление работало.

Ответы [ 4 ]

4 голосов
/ 20 марта 2011

Вы можете изменить файл спецификации, чтобы он не включал файлы по имени (при создании списков), а затем убедитесь, что эти файлы включены - мне нужно проверить, есть ли возможность включать, но не компилировать.


Я сам не пробовал (я использую 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")
1 голос
/ 17 мая 2013

На самом деле это выглядит примерно так:

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, чтобы увидеть, включены ли они, мне удалось исключить их, используя exclude = [myfile0] в Analysis ().

0 голосов
/ 20 августа 2018

pyinstaller предоставляет опцию - exclude для вашего случая использования, а также можно установить модуль или пакет, который вы хотите игнорировать, используя параметр excludes Analysis() в .spec файл.

0 голосов
/ 22 мая 2011

Я думаю, что встроенный интерпретатор в исполняемом файле все равно будет искать .py файлы в том же каталоге и / или PYTHONPATH, py2exe использует zip-файл для собственных компонентов python, iirc pyinstaller встраивает их все в исполняемый файл, возможно, есть возможность сохранить почтовый индекс, как в py2exe (или не добавлять их в спецификации), затем попытаться запустить приложение без файлов и контролировать доступ к файлам с помощью procmon.

...