2015-04-01 49 views
-3

在Python環境中維護一個庫的多個版本是否有任何實際的解決方案?如何維護一個庫的多個版本

例如,我有一個使用可插拔設計一個Web框架。在這個框架下,可以註冊幾個應用程序(應用程序和框架在同一個python進程中運行)。

每個應用程序都將有自己的商業邏輯代碼和通用代碼,說common_httplib。問題是我如何確保common_httplib的多個版本不會相互衝突?

每個應用程序預計將使用的common_httplib但不同版本的自己的副本。 絕對進口,進口吊鉤,小鬼等不工作,因爲common_httplib可以導入其他可能具有相同的版本問題,第三方庫。

以下是應用程序的代碼結構。

$FRAMEWORK_HOME/apps/,有:

/app1 
    /common_httplib (version 1) 
    /third_party libs 
    /app1 BLO code 
/app2 
    /common_httplib (version 2) 
    /third_party libs 
    /app2 BLO code 

回答

0

沒有,有沒有辦法在同一應用程序這樣做。

例如

注意Plone的,一個大的項目,其部署取決於數百個軟件包具有的所有涉及爲定義版本最主要的軟件包「已知良好版本」的調整。

「正確的做法」是爲所有產品「A」提交一份錯誤報告,具體取決於另一個產品「B」的舊版本是否存在衝突,以便他們能夠使用較新版本的「B」,並準備補丁修復這些。 (雖然錯誤報告不被接受,但您可以使用修補程序運行部署)

您也可以考慮使用進程間通信(例如xmlrpc)在多個進程中分割您的應用程序 - 但這取決於您正在做什麼,以及你的衝突軟件包的性質是什麼?

0

在Python 2.6中,Python 2.7庫unittest被回遷爲2.6,因此爲unittest2,所以Python 2.6同時擁有這兩個庫。

測試模塊可以選擇使用unittest有:

import unittest 

unittest2擁有先進的功能,具有:

import unittest2 as unittest 

以類似的方式,你可以版本的依賴關係,但您必須更改軟件包的名稱並在導入中指定相關性。

+0

謝謝!但我不知道如何處理這種情況?請注意** httpmodule **名稱在這兩個版本中是相同的。其中只有一個可以在sys.modules中。 myhttplib1.0 - > httpmodule(1.0) myhttplib2.0 - > httpmodule(2.0) – 2015-04-01 23:18:41

+0

這意味着您需要**重命名**其中一個模塊,以及它導入的共享但不兼容的模塊。我建議使用'httpmoduleold'作爲舊版本,並嘗試更新舊版本的項目以使用新版本,並且將來可以單元測試您的API並儘量不要做出重大更改。 – 2015-04-02 00:31:02