如何导入模块,以便可以从任何目录访问它?

时间:2018-12-28 04:27:50

标签: python-3.x

我具有以下项目结构:

if DEBUG and USE_DEBUG_TOOLBAR:
    MIDDLEWARE = ('debug_toolbar.middleware.DebugToolbarMiddleware',) + MIDDLEWARE

a.py:

x/
    a.py
    b.py
main.py

main.py

from b import *

class A:
    .....

我希望能够独立运行from x.a import A ..... 并通过a.py来访问其功能

我能够运行main.py,但是当我尝试按a.py所示导入它时,找不到该模块。我可以通过在main.py中添加以下行来解决此问题:

a.py

但是这感觉很棘手。有没有更好的方法来实现所需的行为?

1 个答案:

答案 0 :(得分:1)

您需要将目录“ x”标记为包,以便能够加载其中的任何内容。

如Python official documentation所述,您必须在“ x”的根目录中创建一个空的“ __init__.py”文件,以将其标记为包。

然后您的目录结构应如下所示:

.
└── x
    ├── __init__.py
    ├── a.py
    └── b.py
└── main.py

您可能需要编辑“ a.py”,以使用句点表示当前程序包来加载相对于其程序包的模块:

# x/a.py
from .b import *

class A:
    # rest of your code