模块/类在整个项目中可见-Python

模块/类在整个项目中可见-Python,python,python-3.x,python-module,Python,Python 3.x,Python Module,所以基本上我需要一个类,它将在项目的所有子目录中可见。该类是在bar.py脚本中定义的,我需要在放置标记的脚本中实例化一个对象 项目结构如下所示,程序以start_script.py开始 base/ start_script.py gui/ __init__.py gui.py <here> vending/ __init__.py vending.py <here> foo/

所以基本上我需要一个类,它将在项目的所有子目录中可见。该类是在bar.py脚本中定义的,我需要在放置
标记的脚本中实例化一个对象

项目结构如下所示,程序以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
base/
start_script.py
桂/
__初始值
gui.py
贩卖/
__初始值
自动售货机
福/
__初始值
福比
酒吧/
巴比
__初始值
我已经尝试过相对导入,但似乎不起作用。然后我尝试了最愚蠢的解决方案,在我需要的地方复制所需的类,但我认为在整个项目中都有相同文件的副本不是一个好的做法

我尝试的第二个解决方案是将bar文件夹复制到
站点包
。它起了作用,但我不确定是否明智地将一个可能仅在本项目中使用的模块复制到
网站包中

有什么建议吗?

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

您的项目需要一个与
start\u script.py
处于相同级别的
\uuu init\uuuuuuuuuuuuupy
文件来使用相对导入

现在,您可以将类
SpecialSnowflake
添加到,例如,
start\u 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.py
vending.py
内部,您应该能够像这样导入

from bar.bar导入栏

你不需要改变任何事情。我复制了你的目录结构,并在我的计算机上进行了测试

是的,它是有效的,但这不是我想要的。我编辑了这个问题,所以现在可能更清楚了。@ls2709您需要在
base/
目录中有一个
\uuuu init\uuuuuuuuuuuuupy
文件,以便相对导入工作。我添加了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuy
,但我得到了相同的错误
值错误:试图在顶级包之外进行相对导入。@jacinator的答案对我很有用。不过,谢谢你!