模块将间接导入另一个模块,但不会直接导入

2024-05-29 06:36:27 发布

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

我在理解Python中import(绝对和相对)的工作方式时遇到问题

为了简洁起见,我将复制我的工作目录并省略一些文件:

A/
  B/
  __init__.py
  main.py
  C/
    __init__.py
    module1.py
    module2.py

main.py需要f1f2来自module1.pymodule1.py需要来自{}的{}

在修改和阅读文档之后,我将函数从module1.py文件导入到main.py文件中。我必须在main.py内执行以下操作:

from .C.module1 import f1, f2

module1.py依赖于来自module2.py的函数。这很简单:在module1.py内部:

from module2 import f3

这样我可以直接调用module1.py,它将加载f3;但是,在my main.py(顺便说一句,这是一个Flask应用程序)中,它不会加载,因为module1.py抛出ModuleNotFoundError: No module named 'module2'。我想这与我现在在另一个目录有关。无论如何,如果在module1.py中,我将from module2 import f3更改为from .module2 import f3main.py将起作用,但是我不能直接调用module1.py文件,因为它将引发ModuleNotFoundError: No module named '__main__.module2'; '__main__' is not a package异常

编辑:意外交换名称

注意,我在两个目录/包中都有__init__.py。我应该怎样做才能使main.pymodule1.py都工作


Tags: 文件函数nofrompyimport目录init
1条回答
网友
1楼 · 发布于 2024-05-29 06:36:27
test
├── C
│   ├── __init__.py
│   ├── module1.py
│   └── module2.py
└── main.py

test/main.py

from C import f1, f2, call_f3

print(f1())
print(f2())
print(call_f3())

test/C/module1.py

from .module2 import f3

def f1():
    return "f1()"

def call_f3():
    return "called " + f3()

test/C/module2.py

def f2():
    return "f2()"


def f3():
    return "f3()"

test/C/__init__.py

这就是允许我们在main.py中做from C import f1, f2, call_f3的原因

from .module1 import f1, call_f3
from .module2 import f2

main.py的输出

f1()
f2()
called f3()

相关问题 更多 >

    热门问题