2013-02-11 64 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中组合。有时甚至有多个文件,要求每个团队,一个真正的使用,另一个用于开发和测试等