我有以下文件夹结构,
└── project
├── A
│ ├── main.py
│ └── __init__.py
└── B
├── __init__.py
├── C
├── __init__.py
└── module_x.py
我想将
module_x.py
中的所有方法导入到main.py
中。我试过了
from ..B.C.module_x import *
但是我收到以下错误:
ImportError: attempted relative import with no known parent package
我想知道我做错了什么?如何使用相对导入来完成此操作?
from project.B.C import foo
from ...b.c.module_x import foo
但是,相对导入仅适用于一个包。如果项目是一个包,那么您可以在此处使用相对导入。如果项目不是包,则不能。
但是,如果您在 / 中运行脚本并执行诸如 import project.A.b.foo 之类的操作,则相对导入将会成功,因为 project 现在是一个包。在这种情况下,以下两个将是等效的:
from ...B.C import foo
from project.B.C import foo
您必须使用
-m
开关将 python 模块作为脚本运行:
$ cd project
$ python -m A.main # note no .py
这告诉 python A.main 是一个模块 - python 还将扫描当前工作目录(项目)并检测包 B - 这将使您的导入正常工作。