【问题标题】:Is folder name shadowing 3rd-party package name or Python module name is an anti-pattern?文件夹名称遮蔽 3rd-party 包名称或 Python 模块名称是反模式吗?
【发布时间】:2022-01-17 18:30:02
【问题描述】:

考虑以下(非常简化的)项目结构:

project/
    src/
        collections/
        validators/
        foo/
        bar/

“collections”子目录名称隐藏了 Python 的“collections”模块。

“validators”子目录名称会影响“validators”第 3 方包名称。

问题:

子目录与 Python 模块或第 3 方包同名是一种反模式吗?

注意,真正的项目结构有大约 100 个子目录,所以不隐藏名称有点困难。

【问题讨论】:

    标签: python python-3.x design-patterns architecture anti-patterns


    【解决方案1】:

    是的,不鼓励使用阴影。
    问题是:明天你安装一个新的依赖项,它尝试导入 collections 并最终导入了一些超出预期的东西。

    通常的做法是将所有代码放在以你的项目命名的模块中,如下所示:

    project/
        src/
            myapp/
                collections/
                validators/
                foo/
                bar/
    

    这样,您的导入将是 import myapp.collections,这既可以明确区分外部依赖项和内部依赖项(如 PEP-8 所建议的那样),也可以防止与其他库发生任何冲突。

    (您可能需要稍微调整启动应用程序的方式,以使您的 PYTHONPATH 指向 src/myapp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      相关资源
      最近更新 更多