2
假设您正在创建一个包含四个子包的python包,并且有一个模块generic_stuff.py
,这正好是其中两个所需的模块。为了使其具有实际意义,可能generic_stuff.py
包含一些用于读取和写入数据库的自定义函数,并且子包1和2包含用于要单独部署的Web服务器的代码。在子包之间共享Python模块的最佳做法是什么?
的问题是:
什么是正确的方式使
generic_stuff.py
提供给子包1和2?
我能想到的三种方式来做到这一点,但他们都觉得像黑客:
- 请自行封装
generic_stuff.py
一部分并进行安装。这是不令人满意的,因为它污染了整个系统的命名空间(更不用说子包3和4)。 - 将子目录(包含
generic_stuff.py
和四个子包)添加到系统路径中,然后再导入到子包1和子包2中。这并不令人满意,因为它将父目录中的所有内容添加到子包1和2的名称空间中。通过将generic_stuff.py
放在其自己的目录中并将其添加到系统路径中可以避免,但即使如此,如果在子包1和2中有多个模块正在使用多个通用模块,这种方法的扩展性也不会很好(假设尝试重构该项目)。 - 维护
generic_stuff.py
的两个副本:分包1和分包2中的一个。我是否需要解释为什么这是一个坏主意?
我想什么,我心里有一些类型的配置,也许这将走在父目录的__init__.py
或东西,这将使模块X提供给分装Y.是否像这样的东西存在吗?