Module/class 在整个项目中可见 - Python

Module/class visible in whole project - Python

所以基本上我需要一个在项目的所有子目录中都可见的 class。 class 在 bar.py 脚本中定义,我需要在放置 <here> 标记的脚本中实例化一个对象。

项目结构如下,程序以start_script.py开始。

base/
  start_script.py
  gui/
      __init__.py
      gui.py
      <here>
  vending/
      __init__.py
      vending.py
      <here>
  foo/
      __init__.py
      foo.py
      <here>
  bar/
      bar.py
      __init__.py

我已经尝试过相对导入,但它似乎不起作用。然后我尝试了最愚蠢的解决方案,将所需的 class 复制到我需要的任何地方,但我认为在整个项目中复制同一文件并不是一个好习惯。

我尝试的第二个解决方案是将 bar 文件夹复制到 site-packages。它有效,但我不确定将可能仅在该项目中使用的模块复制到 site-packages.

是否明智

有什么建议吗?

(我用编辑问题的新内容编辑了我的答案)

您的项目需要与 start_script.py 处于同一级别的 __init__.py 文件才能使用相对导入。

现在您可以将 class 添加到 SpecialSnowflake 中,例如 start_script.py 并像这样使用它:

# file base/gui/gui.py
from ..start_script import SpecialSnowflake

# file base/vending/vending.py
from ..start_script import SpecialSnowflake

# file base/foo/foo.py
from ..start_script import SpecialSnowflake

这对你有用吗?

你非常接近。我认为您唯一的问题是您正在尝试使用相对导入。在您的 gui.pyvending.py 中,您应该可以像这样导入。

from bar.bar import Bar

您不需要更改任何内容。我复制了您的目录结构并在我的计算机上进行了测试。