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

2024-07-05 15:51:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我试过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

Tags: 函数代码py文件夹game游戏类型bin
1条回答
网友
1楼 · 发布于 2024-07-05 15:51:30

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

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

相关问题 更多 >