假设您正在创建一个具有四个子包的Python软件包,并且有一个模块generic_stuff.py,恰好需要其中两个子包。为了使其具体化,也许generic_stuff.py包含一些用于从数据库读取和写入的自定义函数,而子包1和2包含用于部署Web服务器的代码。
问题是:
正确的方法是什么,使generic_stuff.py可用于子包1和2?
我可以想到三种方法,但它们都感觉像是hack:
1.将generic_stuff.py作为其自己的软件包并安装。这是不令人满意的,因为它会污染整个系统的名称空间(更不用提子包3和4)。
2.在导入子包1和2之前将包含generic_stuff.py和四个子包的父目录添加到系统路径中。这是不令人满意的,因为它会将父目录中的所有内容添加到子包1和2的名称空间中。这可以通过将generic_stuff.py放在自己的目录中并将其添加到系统路径中来避免,但即使如此,如果子包1和2中有多个通用模块被多个模块使用,则此方法无法很好地扩展(想象尝试重构该项目)。
3.维护两份generic_stuff.py的副本:一个在子包1中,另一个在子包2中。我需要解释为什么这是一个坏主意吗?
我想我心中的想法是一种配置,可能会进入父目录的__init__.py或其他地方,可以使模块X可用于subpackage Y。类似这样的东西存在吗?
问题是:
正确的方法是什么,使generic_stuff.py可用于子包1和2?
我可以想到三种方法,但它们都感觉像是hack:
1.将generic_stuff.py作为其自己的软件包并安装。这是不令人满意的,因为它会污染整个系统的名称空间(更不用提子包3和4)。
2.在导入子包1和2之前将包含generic_stuff.py和四个子包的父目录添加到系统路径中。这是不令人满意的,因为它会将父目录中的所有内容添加到子包1和2的名称空间中。这可以通过将generic_stuff.py放在自己的目录中并将其添加到系统路径中来避免,但即使如此,如果子包1和2中有多个通用模块被多个模块使用,则此方法无法很好地扩展(想象尝试重构该项目)。
3.维护两份generic_stuff.py的副本:一个在子包1中,另一个在子包2中。我需要解释为什么这是一个坏主意吗?
我想我心中的想法是一种配置,可能会进入父目录的__init__.py或其他地方,可以使模块X可用于subpackage Y。类似这样的东西存在吗?