2013-02-11 61 views
0

我無法想象這是一個原始問題,但我似乎無法找到答案。我必須使用錯誤的搜索條件。管理依賴於其他包的python包

我們的團隊正在開發一個Python實用程序包。我們將其稱爲「工具」。 「工具」中的各個類需要其他包和模塊。

「工具」有幾類,有相似的名字:

  • 分析器
  • 記錄儀
  • FooTester
  • BarTester

還有2個包。一個叫做「foo」,另一個叫「bar」。有些團隊只使用「foo」包,有些團隊只使用「bar」包。要求僅使用「foo」包的團隊不要安裝「bar」包。

「FooTester」類需要「foo」包,因爲它有一個「import foo」。 「BarTester」類需要「bar」包,因爲它有一個「導入欄」。

兩隊都希望在腳本的頂部放置以下內容:「導入工具」,然後使用它們各自的Tester類。

正如我們現在所做的那樣,除非安裝「bar」和「foo」軟件包,否則不能這樣做。

這樣做的標準方法是什麼?在那兒?

+0

你有重新設計'tools'的選項?我認爲'tools'應該是一個包,每個類作爲內的獨立模塊。 – cdarke 2013-02-11 17:54:46

回答

0

我認爲FooTester將是foo包的一部分,barBarTester一部分。 (或者它的每一個自己的軟件包/模塊)。

由於使用該foo包不安裝bar包隊,這似乎不可思議把測試兩個在tools包都使用要求。

0

「工具」可以有條件地定義它的類:

fooed = barred = False 

try: 
    import foo 
    fooed = True 
    class FooTester(object): 
     pass # your class here... 
except ImportError: 
    pass 

try: 
    import bar 
    barred = True 
    class BarTester(object): 
     pass # your class here... 
except ImportError: 
    pass 

if not fooed or barred: 
    raise RuntimeError("You are not fooed or barred") 
0

有幾個解決方案

選項全部:安裝一切,忽略你的特殊要求

這不回答你的問題,但可能是最有效的解決方案。除非你有一些軟件包,由於任何原因難以安裝,否則不值得爲不同的團隊分離安裝。如果你計算實施這個所需的時間,你會發現,這是不可行的。如果您需要安裝軟件包所需的時間,請參閱related SO answer for pip configuration將安裝速度加快到一兩秒鐘,即使是需要編譯的軟件包。

選擇多:組織的解決方案爲多個多包

您可以分割成解決方案包像

  • tool.common
  • tool.teamA
  • tool.teamB
  • tool.teamB

工具是在這種情況下,所謂的命名空間封裝,並應爲空。

任何軟件包可能需要安裝其它軟件包,通常tool.common可以在所有其他所需的軟件包的一部分。

選項PIP:使用PIP與requirements.txt文件

還有其他常見的模式,使用piprequirements.txt文件。

畫中畫功能安裝在一些文本文件,通常稱爲reuirements.txt申報文件,但任何其他名稱會工作。

而不是使用:

$ pip install tool.teamA 

人會以某種方式獲取代碼一起工作,例如由:

$ git clone repo4tools 

在該倉庫,會有文件

  • requirements-teamA.txt
  • requirements-teamB.txt
  • requirements-teamC.txt

和其他任何將需要。

每個需求文件將包含只需要指定組的包。然後

人們會簡單地調用:

$ cd repo4tools 
$ pip install -r requirements-teamA.txt 

對於開發商來說,最後的選擇變得很流行,特別是在virtualenv中組合。有時甚至有多個文件,要求每個團隊,一個真正的使用,另一個用於開發和測試等