0

我无法想象这是一个原始问题,但我似乎找不到答案。我一定是使用了错误的搜索词。

我们的团队正在开发一个 Python 实用程序包。我们将其称为“工具”。“工具”中的各种类需要其他包和模块。

“工具”有几个类,名称如下:

  • 解析器
  • 记录器
  • FooTester
  • 酒吧测试仪

还有2个其他包。一个叫“foo”,另一个叫“bar”。有些团队只使用“foo”包,有些团队只使用“bar”包。要求只使用“foo”包的团队不要安装“bar”包。

“FooTester”类需要“foo”包,因为它有一个“import foo”。“BarTester”类需要“bar”包,因为它有一个“import bar”。

两个团队都希望将以下内容放在脚本的顶部:“导入工具”,然后使用各自的 Tester 类。

正如我们现在所拥有的,除非你安装了“bar”和“foo”包,否则你不能这样做。

这样做的标准方法是什么?在那儿?

4

3 回答 3

0

我认为这FooTester将是foo一揽子计划BarTester的一部分,也是bar一揽子计划的一部分。(或者也许每个都在自己的包/模块中。)

鉴于使用该foo软件包的团队不安装该bar软件包的要求,将两者的测试人员放在一个双方都使用的软件包中似乎很奇怪tools

于 2013-02-11T18:04:03.033 回答
0

解决方案很少

选项全部:安装一切,忽略您的特殊要求

这不能回答您的问题,但可能是最有效的解决方案。除非您有一些软件包,由于任何原因难以安装,否则不值得为不同的团队分开安装。如果你计算实现它所需的时间,你会发现,这是不可行的。如果您担心安装软件包所需的时间,请参阅相关的 SO 答案以了解 pip 配置,即使对于需要编译的软件包,您的安装速度也会缩短到一两秒。

Option Multi:将解决方案组织成多个多级包

您可以将解决方案拆分为包,例如

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

在这种情况下,工具是所谓的命名空间包,应该是空的。

任何包都可能需要安装其他包,通常这些包tool.common可能是所有其他包中所需包的一部分。

requirements.txt选项 Pip:对文件使用 pip

还有其他常见的模式,使用piprequirements.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 结合使用。有时每个团队甚至有多个需求文件,一个用于实际使用,另一个用于开发和测试等。

于 2014-04-22T19:58:45.293 回答
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")
于 2013-02-11T18:43:31.670 回答