2011-03-20 56 views
7

我已經成功地包裝我PyQt4的應用程序作爲Windows上的「獨立」的應用程序,它的工作原理。PyInstaller但保持.py文件升級

但是這個應用程序可以升級本身,這是通過更換新的版本,通過互聯網下載我寫的實際代碼(.py文件)來完成。

我怎麼能告訴PyInstaller完成自己的工作(放在一起的DLL文件,與閃亮的圖標生成發射器,等等),但讓.py文件不變?

我需要這些文件直接在磁盤上,爲了使自動更新工作。

回答

4

可以更改規範文件明確不包括由名文件(建築列表時),然後確保這些文件包括 - 我必須檢查是否有包括但不編譯選項。


我還沒有嘗試過這個自己(我用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") 
+0

如果您可以提供樣本.spec,我可以接受。 – Flavius 2011-03-20 09:34:21

+0

@Flavius我提供了一個編輯示例給我的anser,雖然考慮一下,您可能想使用py [co]文件,具體取決於您部署的人員,是否真的希望他們看到您的源代碼,以及多少表現很重要。 – theheadofabroom 2011-03-20 19:28:20

0

我認爲在可執行文件中嵌入的解釋仍然會尋找在同一目錄和/或PYTHONPATH .py文件,py2exe使用原生的Python組件的zip文件,IIRC pyinstaller嵌入他們都在執行,也許有在py2exe中保留一個壓縮文件的選項(或者不在規範中添加它們),然後嘗試運行應用程序而不使用procmon訪問文件和監視器文件。

1

其實它更像是這樣的:

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以查看它們是否包含在內,我設法在Analysis()中使用excludes = [myfile0]來排除它們。

相關問題