从当前目录的另一个子目录导入另一个模块';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:尝试在非包中进行相对导入
。请参阅我编辑的响应。在直接执行的文件中,相对导入不起作用;它们仅在导入的模块中工作。如果您从其他地方导入资源,它应该可以工作。