2015-09-01 100 views
0

是否可以創建一個python模塊,根據需要懶惰地下載和安裝子模塊?我曾與"subclassed" modules that mimic real modules合作過,但我從來沒有試過這樣做下載涉及。有沒有一個保證的目錄,我可以下載源代碼和數據,然後該模塊可以在後續運行中使用?懶惰下載/安裝python子模塊

爲了使這更具體,這裏是理想的行爲:

  • 用戶運行pip install magic_module和輕量級magic_module安裝到他們的系統。
  • 用戶運行該代碼import magic_module.alpha
  • 的代碼都到了預定的URL,被告知有一個「alpha」子包,並隨後給出的alpha.pyalpha.csv文件的URL。
  • 系統將這些文件下載到某處,它知道它的某處,然後加載alpha模塊。
  • 在後續運行中,用戶可以利用下載的文件跳過服務器故障。
  • 在某個時刻,用戶可以從命令行運行import magic_module.alpha ; alpha._upgrade()函數來清除緩存並獲取最新版本。

這可能嗎?這是否合理?使用權限會遇到什麼樣的問題?

回答

0

可以,當然。核心功能可能是import hooks。 Python 3中的相關模塊爲importlib

當您想要加載以非標準方式存儲的模塊時,需要擴展導入機制。例子包括通過網絡從數據庫加載的模塊。

方便,可能不是。導入機器是python的一部分,它已經發布了幾個版本的變化。它現在正在經歷一次完整的重構,大部分現有的東西都被棄用了。

合理,它取決於你。這裏有一些我可以想到的注意事項:

  • 棘手得到正確的,特別是如果你必須支持幾個python版本。
  • 錯誤處理呢?在正常情況下應該準備import失敗嗎?他們是否應該優雅地退化?或者只是碰撞並發現一個回溯?
  • 安全?基本上你從某個地方下載代碼,你如何確保連接不被劫持?
  • 如何版本?如果您更新了某些遠程模塊,如何才能使應用程序下載正確的版本?
  • 相關性?推送安全更新?權限管理?

綜上所述,您必須解決軟件包管理器的大部分問題,同時還要解決下載和權限問題。所有這些問題都很棘手,容易出現可怕的後果。因此,考慮到所有這一切,真正歸結爲您認爲值得投資的資源有多少,以及與常規使用易於獲得的工具(例如pip)相比,增加了哪些價值。

(許可問題不能真正回答,直到你爲你的包管理器提出設計)