我正在尝试写游戏。因此,我有许多不同类型的代码,并希望将它们安排在一个有用的层次结构中。
我已经查看了将__init__.py
放在每个文件夹中的解决方案,但我仍然有点困惑,尽管不如python解释器那么多。
现在假设resource1.py
想要从physics1.py
或.py
目录中的任何其他Game
文件导入函数,我将如何进行此操作?< / p>
我已经尝试from bin.physics.physics1 import function
,但显然这不起作用。
感谢您的帮助。
/Game
launcher.py
/bin
game.py
__init__.py
/physics
__init__.py
physics1.py
physics2.py
/resources
__init__.py
resource1.py
答案 0 :(得分:1)
除非您使Game
成为一个包(即通过在__init__.py
目录中放置Game
),否则无法使用常规导入机制。 python相对导入系统仅在包中使用。它不是通过它们在目录结构中的位置来引用任意模块的通用系统。如果你将游戏作为一个包,那么你可以from ..bin.physics.physics1 import function
。
编辑:另请注意,相对导入不适用于作为主程序执行的脚本。如果您尝试直接运行resource.py
并使用相对导入,则会出现“在非程序包中尝试相对导入”错误。如果从其他模块导入资源,它将起作用。这是因为相对导入系统基于执行模块的“名称”,当您直接运行脚本时,其名称为__main__
,而不是通常命名的任何名称。如果你真的需要,可以使用the __package__
keyword解决这个问题,但这可能有点棘手。