簡體   English   中英

Pyinstaller如何使用--onefile選項將數據嵌入exe文件?

[英]How does Pyinstaller embed datas into exe file with --onefile option?

在Pyinstaller中使用--onefile選項構建exe文件時,可以指定數據(例如圖片或其他內容)。

在運行時,將創建一個tmp目錄(MEI *),其中包含python解釋器,您的數據采用原始格式...

Pyinstaller如何嵌入所有這些數據?

.exe文件僅是機器碼說明,對嗎? 他們不應該是“容器文件” ...

謝謝 !

您已閱讀pyinstaller手冊嗎?

https://pythonhosted.org/PyInstaller/#id22

單文件程序如何工作引導加載程序也是單文件捆綁包的核心。 啟動后,它將在此操作系統的適當臨時文件夾位置中創建一個臨時文件夾。 該文件夾名為_MEIxxxxxx,其中xxxxxx是隨機數。

一個可執行文件包含您的腳本使用的所有Python模塊的嵌入式存檔,以及任何非Python支持文件(例如.so文件)的壓縮副本。 引導加載程序解壓縮支持文件,並將副本寫入臨時文件夾。 這可能需要一些時間。 這就是為什么單文件應用程序比單文件夾應用程序啟動慢的原因。

創建臨時文件夾后,引導程序將在臨時文件夾的上下文中與單文件夾捆綁包完全相同。 當捆綁的代碼終止時,引導加載程序將刪除臨時文件夾。

(在Linux和相關系統中,可以使用“ no-execution”選項掛載/ tmp文件夾。該選項與PyInstaller一文件包不兼容。它需要從/ tmp中執行代碼。)

由於該程序會創建一個具有唯一名稱的臨時文件夾,因此您可以運行該應用程序的多個副本; 他們不會互相干擾。 但是,由於沒有共享空間,因此運行多個副本在磁盤空間上非常昂貴。

如果程序崩潰或被殺死(在Unix上為kill -9,在Windows上為“任務管理器”,在Mac OS為“強制退出”),則_MEIxxxxxx文件夾不會被刪除。 因此,如果您的應用程序頻繁崩潰,則用戶將失去多個_MEIxxxxxx臨時文件夾的磁盤空間。

好吧,我發現了這個: https : //en.wikipedia.org/wiki/Executable_compression

壓縮后的數據可以與解壓縮代碼一起成為單個可執行文件。

因此,Pyinstaller可能包括一個運行時打包程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM