Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 强制执行包分离(避免从特定模块导入)_Python_Python 2.7 - Fatal编程技术网

Python 强制执行包分离(避免从特定模块导入)

Python 强制执行包分离(避免从特定模块导入),python,python-2.7,Python,Python 2.7,我正在开发一个包含以下根文件夹的python应用程序: +---FrontEnd +---BackEnd +---Common 前端和后端从通用导入,但通用不应从前者导入。我希望以编程方式强制执行此规则,这样我的团队(尤其是新团队成员)就不会意外地将前端或后端导入到公共文件中 我听说导入钩子可以帮上忙,但我还没有找到太多关于这方面的信息。我的第一次尝试也不太顺利: 通用。\uuuuu init\uuuuuuuuuupy class NoForeignDependencies(objec

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

 +---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系统让测试失败。感谢您的回答,我希望有一种编程方式来实现这一点(理想情况下,能够在部署时禁用它)