Question

J'ai réussi à emballer mon application PyQt4 comme une application « autonome » sur les fenêtres, cela fonctionne.

Cependant, cette application peut se mettre à niveau, ce qui se fait en remplaçant le code réel écrit par moi (fichiers py) avec les nouvelles versions, téléchargé via Internet.

Comment puis-je savoir PyInstaller faire son travail (en mettant ensemble les DLL, la génération du lanceur avec l'icône brillante, etc.), mais laisser les fichiers .py intacts?

J'ai besoin ces fichiers directement sur le disque, pour la mise à jour automatique au travail.

Était-ce utile?

La solution

Vous pouvez modifier le fichier spec pour inclure spécifiquement les fichiers par nom (lors de la construction des listes), alors assurez-vous que ces fichiers sont inclus -. Je dois vérifier s'il y a une possibilité d'inclure, mais pas compiler


Je n'ai pas essayé moi-même (j'utiliser pyInstaller au travail, mais ne l'ont pas mis en place sur mon PC à domicile), mais c'est le genre de chose que je pense devrait être ok:

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")

Autres conseils

En fait, il est plus comme ceci:

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")

script est en fait un tuple avec la forme suivante:

('myfile0.py', 'pathto\\myfile0.py', 'PYSOURCE')

Vous pouvez également avoir pour empêcher les fichiers d'être inclus dans PYZ, reportez-vous à la table des matières PYZ pour voir s'ils sont inclus, je réussi à les exlude à l'aide exclut = [myfile0] dans l'analyse ().

Je pense que l'interprète intégré dans l'exécutable toujours rechercher des fichiers .py dans le même répertoire et / ou PYTHONPATH, py2exe utilise un fichier zip pour les composants de python natif, IIRC pyinstaller enrobe tous dans l'exécutable, peut-être il y a une option pour garder un zip comme dans py2exe (ou non les ajouter dans la spécification), essayez d'exécuter l'application sans les fichiers et le fichier de contrôle des accès avec procmon.

pyinstaller fournit l'option exclude pour votre cas d'utilisation, et il est également possible de définir le module ou package que vous voulez ignorer l'aide du paramètre excludes de Analysis() dans le fichier .spec.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top