問題:即使是在30年之后,Python仍然沒能拿到理想的方法,用以將程序或腳本轉(zhuǎn)換為自打包可執(zhí)行文件,并輕松部署在多種平臺之上。
雖然這一目標(biāo)已經(jīng)有辦法實(shí)現(xiàn),但依靠的主要是第三方工具,而非Python的原生功能——此外,其使用難度也不太友好。
最具知名且最受支持的當(dāng)數(shù)PyInstaller,它能夠打包多種廣受喜愛的高人氣第三方擴(kuò)展,例如NumPy。不過PyInstaller必須與這些第三方擴(kuò)展手動保持同步,而這在Python的龐大生態(tài)系統(tǒng)中無疑是一項艱巨的任務(wù)。此外,PyInstaller會生成超大的應(yīng)用程序包,因為其中捆綁有程序import語句中所要求的全部內(nèi)容,而且并不確定在運(yùn)行時究竟會用到哪些組件。此外,PyInstaller也無法實(shí)現(xiàn)跨平臺應(yīng)用程序打包;我們必須在目標(biāo)部署平臺上進(jìn)行包創(chuàng)建。
解決方案:我對PyInstaller抱有充分的尊重,但我們可能還需要一套Python原生解決方案——無論是內(nèi)置形式,還是通過標(biāo)準(zhǔn)庫提供。它應(yīng)當(dāng)允許開發(fā)人員以獨(dú)立二進(jìn)制文件的形式將Python應(yīng)用程序打包并交付至各類常見的平臺。理想情況下,這款內(nèi)置的打包器應(yīng)該利用運(yùn)行時代碼覆蓋率信息確保僅打包所需的庫(而非所有內(nèi)容),并能夠自動與其余Python庫保持同步。
目前還沒有這樣的解決方案存在,但關(guān)于如何構(gòu)建此類工具的提示倒是所在多有。PyOxidizer項目使用Rust語言生成能夠嵌入Python的二進(jìn)制文件,并將此作為創(chuàng)建獨(dú)立Python應(yīng)用程序的一種方法。雖然該項目尚處于起步階段,距離成為完整的應(yīng)用程序交付方案還有很長的路要走,但這足以證明Python生態(tài)系統(tǒng)之外的成果也許會成為解決挑戰(zhàn)的關(guān)鍵。
以上內(nèi)容為大家介紹了Python打包與獨(dú)立可執(zhí)行文件,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.jsszjs.cn/