PyInstaller, но сохраняя .py файлы обновляемыми

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

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

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

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

7 голосов | спросил Flavius 20 MaramSun, 20 Mar 2011 04:12:34 +03002011-03-20T04:12:34+03:0004 2011, 04:12:34

4 ответа


0

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


Я сам не пробовал это (я использую 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")
ответил theheadofabroom 20 MaramSun, 20 Mar 2011 05:32:55 +03002011-03-20T05:32:55+03:0005 2011, 05:32:55
0

На самом деле это больше похоже на это:

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 ().

ответил jbfuzier 17 Maypm13 2013, 12:13:22
0

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

ответил sherpya 22 Mayam11 2011, 06:32:57
0

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

ответил iMath 20 AM000000110000002431 2018, 11:59:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132