0

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

我已经查看了涉及放置__init__.py在每个文件夹中的解决方案,但我仍然有些困惑,尽管不如 python 解释器那么多。

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

我已经尝试过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
4

1 回答 1

1

Game除非您制作一个包(即,通过__init__.pyGame目录中放置一个) ,否则正常的导入机制是不可能的。python 相对导入系统仅适用于 packages。它不是通过目录结构中的位置来引用任意模块的通用系统。如果你把 Game 做成一个包,那么你可以做from ..bin.physics.physics1 import function.

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

于 2012-07-04T22:16:40.023 回答