Python程序即將獲得更快的啟動速度,這要歸功於PEP 810"顯式延遲導入"提案,該功能允許腳本推遲加載導入的庫,直到實際需要時才加載,而不是在啟動時就加載。
這項Python增強提案由指導委員會成員Pablo Salgado於10月3日提出,並於11月3日獲得批准。該增強功能將把延遲導入直接集成到Python語言中,作為一個可選功能。
在Python中導入模塊既是優勢也是痛點。優勢在於幾個導入語句就能極大擴展程序功能,但痛點是導入的符號可能永遠不會被使用,這可能會增加啟動時間。一個典型例子是從命令行調用程序時使用--help參數,卻不得不等待加載那些並不需要的導入模塊。
作為解決方案,延遲導入將事情推遲到實際需要時才執行。
這個想法並不新鮮(令人驚訝的是標準實現竟然花了這麼長時間)。雖然有多種方法可以實現延遲導入,但Python語言本身並沒有內置這個功能。
這並非全新概念,但之前的嘗試都失敗了。PEP 690被拒絕,部分原因是它將延遲導入設為默認選項,引發了對社區分裂和向後兼容性的擔憂。與此同時,開發者創建了自己的解決方案,一些組織甚至分叉了CPython。
PEP 810通過將延遲導入設為可選功能而獲得成功,在保持向後兼容性的同時,標準化了目前分散的自定義解決方案格局。
該提案引起了超過450條評論,包括關於"defer"(推遲)是否比"lazy"(延遲)聽起來更專業的爭論。
Python指導委員會代表Barry Warsaw發布評論:"感謝你們在這方面的工作,這是Python社區期待已久的功能。考慮到早期的嘗試和現有的解決方案,我們認為這達到了完美的平衡。"
雖然開發者還需要等待一段時間才能享受到PEP 810的成果,但對於許多因漫長加載時間而沮喪的Python用戶來說,Python本身能夠解決這個問題的功能來得再及時不過了。
Q&A
Q1:PEP 810延遲導入功能是什麼?
A:PEP 810是Python的"顯式延遲導入"增強提案,允許程序推遲加載導入的庫,直到實際需要時才加載,而不是在程序啟動時就加載所有導入模塊,從而顯著提升Python程序的啟動速度。
Q2:為什麼之前的延遲導入方案沒有成功?
A:之前的PEP 690提案被拒絕,主要是因為它將延遲導入設為默認選項,引發了社區對兼容性問題和社區分裂的擔憂。而PEP 810成功的關鍵在於將延遲導入設為可選功能,保持了向後兼容性。
Q3:PEP 810延遲導入能解決什麼實際問題?
A:主要解決Python程序啟動時間過長的問題。比如當你在命令行使用--help參數時,程序需要加載很多實際用不到的導入模塊,延遲導入可以避免這種不必要的等待時間,只在真正需要時才加載相應模塊。






