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

时间:2012-07-04 22:00:01

标签: python import module path

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

我已经查看了将__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

1 个答案:

答案 0 :(得分:1)

除非您使Game成为一个包(即通过在__init__.py目录中放置Game),否则无法使用常规导入机制。 python相对导入系统仅在包中使用。它不是通过它们在目录结构中的位置来引用任意模块的通用系统。如果你将游戏作为一个包,那么你可以from ..bin.physics.physics1 import function

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