从当前目录的另一个子目录导入另一个模块';s父目录(python)

从当前目录的另一个子目录导入另一个模块';s父目录(python),python,import,module,path,Python,Import,Module,Path,我想写一个游戏。因此,我有很多不同类型的代码,并希望将它们安排在一个有用的层次结构中 我已经研究过在每个文件夹中放置\uuuu init\uuuu.py的解决方案,但是我仍然有点困惑,尽管没有python解释器那么多 现在假设resource1.py想要从physics1.py导入一个函数,或者实际上是从Game目录中的任何其他.py文件导入一个函数,我该怎么做呢 我尝试了bin.physics.physics1导入函数的,但显然不起作用 谢谢你的帮助 /Game launcher.py

我想写一个游戏。因此,我有很多不同类型的代码,并希望将它们安排在一个有用的层次结构中

我已经研究过在每个文件夹中放置
\uuuu init\uuuu.py
的解决方案,但是我仍然有点困惑,尽管没有python解释器那么多

现在假设
resource1.py
想要从
physics1.py
导入一个函数,或者实际上是从
Game
目录中的任何其他
.py
文件导入一个函数,我该怎么做呢

我尝试了bin.physics.physics1导入函数的
,但显然不起作用

谢谢你的帮助

/Game
    launcher.py
    /bin
        game.py
        __init__.py
        /physics
            __init__.py
            physics1.py
            physics2.py
    /resources
        __init__.py
        resource1.py

使用正常的导入机制是不可能的,除非您将
Game
制作成一个包(即,将
\uuuu init\uuuuuuuuy.py
放入
Game
目录)。python相对导入系统仅在包内工作。它不是一个通过目录结构中的位置引用任意模块的通用系统。如果您将游戏制作成一个包,那么您可以从..bin.physics.physics1导入函数执行


编辑:还要注意,相对导入不能从作为主程序执行的脚本中工作。如果您试图直接运行
resource.py
,并且它使用相对导入,则会出现“在非包中尝试相对导入”错误。如果您从另一个模块导入资源,它将起作用。这是因为相对导入系统基于执行模块的“名称”,当您直接运行脚本时,它的名称是
\uuuuu main\uuuuu
,而不是它通常的名称。如果你真的需要的话,你可以用它来解决这个问题,但是它可能有点棘手。

我已经把
\uu init\uuuuuuuuuuuuy.py
文件放在
游戏中
但我仍然得到了
importorror:没有名为physics.physics1
的模块。我只是用那个目录结构测试了它,效果很好。你确定目录结构如你所说,并且每个目录中都有
\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。因此它现在可以从
launcher.py
工作,但是从
resource1.py
我得到
ValueError:尝试在非包中进行相对导入
。请参阅我编辑的响应。在直接执行的文件中,相对导入不起作用;它们仅在导入的模块中工作。如果您从其他地方导入资源,它应该可以工作。