【问题标题】:What would having both a package and its subpackages in PYTHONPATH break?在 PYTHONPATH 中同时包含一个包及其子包会破坏什么?
【发布时间】:2019-01-18 09:58:10
【问题描述】:

我们有一个结构如下的包:

ParentDirectory/
  Able/
    __init__.py
    Baker/
      __init__.py
      stuff.py
      Charlie/
        __init__.py
        things.py

使用 PYTHONPATH 中的 ParentDirectory,Charlie 以普通方式导入: from Able.Baker import Charlie

我的一位同事想让 PYTHONPATH 包含“ParentDirectory;ParentDirectory/Able;ParentDirectory/Able/Baker”,以便他们可以直接导入 Baker 和 Charlie,就好像他们是顶级的一样:

import Able
import Baker
import Charlie

这会破坏什么

(对我来说这似乎是一种不好的做法,但我无法说出它不好的具体原因。)

【问题讨论】:

  • (我们需要从多个 Anaconda 环境中获得这个外部目录,这就是为什么 PYTHONPATH 而不是 .pth 文件的原因)
  • 如果您希望能够单独导入每个包...也许它们应该是单独的包?
  • @Aran-Fey 我正在尝试提出具体的例子来说明为什么替代方案不好。

标签: python python-import python-module python-packaging


【解决方案1】:

它绝对会破坏事物。如果这样做,BakerCharlie 将是与 Able.BakerAble.Baker.Charlie 不同的模块。导入BakerAble.Baker 将运行模块初始化两次。您将拥有两个类的副本(和函数,以及大多数其他东西,但对类的影响更糟)。您将破坏相对导入,因为 BakerCharlie 将是顶级的,而不是在包内。这是一个全方位的糟糕想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多