使用相对路径从另一个文件夹的子文件夹导入Python模块

问题描述 投票:0回答:2

我有以下文件夹结构,

└── 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

我想知道我做错了什么?如何使用相对导入来完成此操作?

python python-import relative-path relative-import
2个回答
1
投票
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

1
投票

您必须使用

-m
开关将 python 模块作为脚本运行:

$ cd project
$ python -m A.main # note no .py

这告诉 python A.main 是一个模块 - python 还将扫描当前工作目录(项目)并检测包 B - 这将使您的导入正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.