模块/类在整个项目中可见-Python
所以基本上我需要一个类,它将在项目的所有子目录中可见。该类是在bar.py脚本中定义的,我需要在放置模块/类在整个项目中可见-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/
标记的脚本中实例化一个对象
项目结构如下所示,程序以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的答案对我很有用。不过,谢谢你!