首页 > 解决方案 > 在 Python 的子模块的 init.py 文件中使用 import 语句

问题描述

我有以下文件夹结构:

- a/
  - test.py
  - b/
    - __init__.py (empty)
    - c/
      __init.py (imports classes from x.py and z.py)
      x.py
      z.py

test.py内容:

from b.c import SomeClient

我正在尝试导入ctest.py但收到以下错误:

ModuleNotFoundError: No module named 'c'

__init__.py文件夹下的内容c/如下所示:

from c.x import SomeClient
from c.z import AnotherClient

我尝试c.从 import 语句中删除指针,但它开始抛出错误,说没有名为xor的模块z

标签: python

解决方案


该文件a/b/c/__init__.py导入相对于c. 问题是隐式相对导入的使用(以及在此参考中)已经在 Python3 中删除:

不再有任何隐含的导入机制

要么在你的使用绝对导入a/b/c/__init__.py

from b.c.x import SomeClient
from b.c.z import AnotherClient

或显式相对导入

from .x import SomeClient
from .z import AnotherClient

如果这不可能,只需设置PYTHONPATH指向c可以找到目录的位置,以便 Python 在导入时可以看到其中的模块。如果在 Linux 中:

export PYTHONPATH=${PYTHONPATH}:/path/to/a/b

推荐阅读