[英]managing a python package that depends on other packages
我無法想象這是一個原始問題,但是我似乎找不到答案。 我一定使用了錯誤的搜索詞。
我們的團隊正在開發Python實用程序包。 我們將其稱為“工具”。 “工具”中的各種類需要其他軟件包和模塊。
“工具”有幾個類,名稱如下:
還有2個其他軟件包。 一個稱為“ foo”,另一個稱為“ bar”。 一些團隊僅使用“ foo”包,一些團隊僅使用“ bar”包。 要求僅使用“ foo”軟件包的團隊不要安裝“ bar”軟件包。
“ FooTester”類需要“ foo”包,因為其中包含“ import foo”。 “ BarTester”類需要“ bar”包,因為其中包含“ import bar”。
兩個團隊都希望將以下內容放在腳本的頂部:“導入工具”,然后使用其各自的Tester類。
正如我們現在所擁有的,除非您安裝了“ bar”和“ foo”軟件包,否則您將無法執行此操作。
這樣做的標准方法是什么? 在那兒?
我認為FooTester
將成為foo
軟件包的一部分,而BarTester
將成為bar
軟件包的一部分。 (或者也許每個都在自己的包/模塊中。)
鑒於要求使用foo
軟件包的團隊不要安裝bar
軟件包,將這兩個測試人員都放在同時使用的tools
軟件包中似乎很奇怪。
“工具”可以有條件地定義其類:
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")
解決方案很少
這不能回答您的問題,但可能是最有效的解決方案。 除非您有一些由於任何原因而難以安裝的軟件包,否則不值得為不同的團隊而分開安裝它們。 如果您算出實現此目標所需的時間,那將是不可行的。 如果您擔心安裝軟件包所需的時間,請參見相關的SO答案,以進行pip配置 ,從而將安裝速度降低到一到兩秒,甚至對於需要編譯的軟件包也是如此。
您可以將解決方案拆分為以下軟件包
tool.common
tool.teamA
tool.teamB
tool.teamB
在這種情況下,工具就是所謂的名稱空間包,並且應為空。
任何軟件包都可能需要安裝其他軟件包,通常tool.common
可能是所有其他軟件包中必需的一部分。
requirements.txt
.txt文件使用點 還有其他常見的模式,使用pip
和requirements.txt
文件。
pip允許安裝在某些文本文件中聲明的文件,通常稱為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結合使用時。 有時每個團隊甚至有多個需求文件,一個是實際使用的文件,另一個是用於開發和測試的文件等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.