Python 强制执行包分离(避免从特定模块导入)
我正在开发一个包含以下根文件夹的python应用程序:Python 强制执行包分离(避免从特定模块导入),python,python-2.7,Python,Python 2.7,我正在开发一个包含以下根文件夹的python应用程序: +---FrontEnd +---BackEnd +---Common 前端和后端从通用导入,但通用不应从前者导入。我希望以编程方式强制执行此规则,这样我的团队(尤其是新团队成员)就不会意外地将前端或后端导入到公共文件中 我听说导入钩子可以帮上忙,但我还没有找到太多关于这方面的信息。我的第一次尝试也不太顺利: 通用。\uuuuu init\uuuuuuuuuupy class NoForeignDependencies(objec
+---FrontEnd
+---BackEnd
+---Common
前端和后端从通用导入,但通用不应从前者导入。我希望以编程方式强制执行此规则,这样我的团队(尤其是新团队成员)就不会意外地将前端或后端导入到公共文件中
我听说导入钩子可以帮上忙,但我还没有找到太多关于这方面的信息。我的第一次尝试也不太顺利:
通用。\uuuuu init\uuuuuuuuuupy
class NoForeignDependencies(object):
PATH_TRIGGERS = ['FrontEnd', 'BackEnd']
def __init__(self, path_entry):
if path_entry not in self.PATH_TRIGGERS:
raise ImportError()
def find_module(self, fullname, path=None):
print 'Import not allowed for this module'
return None
sys.path_hooks.append(NoForeignDependencies)
关于如何实现这一点,有什么想法吗?将这三个包分成不同的包,然后使用Jenkins为每个包自动运行单元测试,例如,只有有限的人可以访问Jenkins?这样,如果有人去添加一个导入的前端公共,那么Jenkins上的公共测试将失败,因为前端没有安装在Jenkins用来运行公共测试的公共环境中。在开发时这样做是绝对必要的吗?我们在git预提交钩子中有这类检查,因此您可以为测试或播放执行这类导入,并且只有在尝试提交时才会被拒绝。但是,如果您事先知道该逻辑,则不必推送到CI系统让测试失败。感谢您的回答,我希望有一种编程方式来实现这一点(理想情况下,能够在部署时禁用它)