Вопрос

Мне удалось упаковать свое приложение 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 файл .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top