如何处理Python中的子模块相互依赖?

时间:2017-08-23 16:30:47

标签: python git

我有一个包含多个子模块的程序。我希望子模块可以独立使用,这样我也可以在其他程序中使用它们中的一些。但是,子模块具有相互依赖性,需要运行彼此的各个方面。解决这个问题最不成问题的方法是什么?

现在,我已经按照以下方式构建了我的程序:

myapp/
|-- __init__.py
|-- app.py
|-- special_classes
|   |-- __init__.py
|   `-- tools
|       `-- __init__.py
|-- special_functions
|   |-- __init__.py
|   `-- tools
|       `-- __init__.py
`-- tools
    |-- __init__.py
    |-- classes.py
    `-- functions.py

每个子模块是其父项的git submodule

这样做的好处是我可以独立管理和开发每个子模块,并将这些子模块中的一个添加到新项目中就像git clonegit submodule add一样简单。因为我在托管的共享计算环境中工作,所以这也使得自用户环境管理和管理环境以来运行程序变得容易。软件版本控制和安装是有争议的问题。

缺点是在这个例子中,我现在有3个tools子模块的副本,它们彼此独立,并且每当它们中的任何一个发生变化时都必须手动更新。在子模块上进行任何类型的开发都变得非常麻烦。同样,它现在已经使我运行的单元测试数量增加了两倍,因为测试在每个子模块中运行,并且tools模块有3个副本。

我见过各种导入方法,例如here提到的方法,但这似乎不是一个理想的解决方案。

我已经阅读了有关如何创建正式Python包here的内容,但这似乎是一项艰巨的任务,并且会让我的最终用户更难以实际安装和运行该程序。

另一个相关问题是here

1 个答案:

答案 0 :(得分:1)

最好在父级中使用单个工具并将其导入子模块。到目前为止对我来说是最好的。