如何阻止包内导入
How to block intra package imports
我正在构建一个 python 应用程序,我的代码库具有以下结构:
/utils
/foo
/package_1
/foo
/package_2
/foo
/whatever
我想执行以下规则:
- 在 utils 包中只能从 utils 包本身导入
- 在 package_1 中可以从 utils 和 package_1[= 导入31=]本身
- 在 package_2 中可以从 utils 和 package_2[= 导入31=]本身
- 在任何你可以从所有其他包导入
我可以使用哪种自动策略来执行此编码规则?
AFAIK,您不能阻止某人导入在他的路径中找到的内容,但您可以修改路径以不包含您不希望访问的内容。我不推荐它,但它是可行的...
我会选择静态分析。也就是说,不要在运行时强制执行此操作。您可以将它与用于检查和测试代码的工具一起使用。
我的方法是调整来自 LibCST 项目的导入分析的范围示例,以强制执行您的导入要求。
值得一试flake8-import-graph。
如果你想要一些运行时检查,你可以编写一个自定义模块导入器。参见 import-hooks and an the examples。
我正在构建一个 python 应用程序,我的代码库具有以下结构:
/utils
/foo
/package_1
/foo
/package_2
/foo
/whatever
我想执行以下规则:
- 在 utils 包中只能从 utils 包本身导入
- 在 package_1 中可以从 utils 和 package_1[= 导入31=]本身
- 在 package_2 中可以从 utils 和 package_2[= 导入31=]本身
- 在任何你可以从所有其他包导入
我可以使用哪种自动策略来执行此编码规则?
AFAIK,您不能阻止某人导入在他的路径中找到的内容,但您可以修改路径以不包含您不希望访问的内容。我不推荐它,但它是可行的...
我会选择静态分析。也就是说,不要在运行时强制执行此操作。您可以将它与用于检查和测试代码的工具一起使用。
我的方法是调整来自 LibCST 项目的导入分析的范围示例,以强制执行您的导入要求。
值得一试flake8-import-graph。
如果你想要一些运行时检查,你可以编写一个自定义模块导入器。参见 import-hooks and an the examples。