实施包分离(避免从特定模块导入)

时间:2014-02-12 20:11:18

标签: python python-2.7

我正在开发一个包含以下根文件夹的python应用程序:

 +---FrontEnd 
 +---BackEnd
 +---Common

来自Common但Common的FrontEnd和BackEnd导入不应从前者导入。我想以编程方式强制执行此规则,以便我的团队(尤其是新团队成员)不会意外地将FrontEnd或BackEnd导入Common。

我听说导入钩子可以帮到这里,但我没有找到太多关于此的信息。我的第一次尝试也不是那么顺利:

Common.__init__.py

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)

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:0)

如何将这三个包装成单独的包,然后使用Jenkins自动运行每个包的单元测试,例如,只有少数人可以访问Jenkins?这样,如果有人去并在Common中添加了FrontEnd的导入,则Jenkins上的Common测试会失败,因为在Jenkins用于运行Common测试的Common环境中没有安装FrontEnd。