我有一个包含多个子模块的程序。我希望子模块可以独立使用,这样我也可以在其他程序中使用它们中的一些。但是,子模块具有相互依赖性,需要运行彼此的各个方面。解决这个问题最不成问题的方法是什么?
现在,我已经按照以下方式构建了我的程序:
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 clone
和git submodule add
一样简单。因为我在托管的共享计算环境中工作,所以这也使得自用户环境管理和管理环境以来运行程序变得容易。软件版本控制和安装是有争议的问题。
缺点是在这个例子中,我现在有3个tools
子模块的副本,它们彼此独立,并且每当它们中的任何一个发生变化时都必须手动更新。在子模块上进行任何类型的开发都变得非常麻烦。同样,它现在已经使我运行的单元测试数量增加了两倍,因为测试在每个子模块中运行,并且tools
模块有3个副本。
我见过各种导入方法,例如here提到的方法,但这似乎不是一个理想的解决方案。
我已经阅读了有关如何创建正式Python包here的内容,但这似乎是一项艰巨的任务,并且会让我的最终用户更难以实际安装和运行该程序。
另一个相关问题是here
答案 0 :(得分:1)
最好在父级中使用单个工具并将其导入子模块。到目前为止对我来说是最好的。