Python3 从不同文件导入模块

Python3 Module import from different files

我在 python 中有一个项目使用与此类似的文件结构:

program/
    main.py
    SubFolder/
        module1.py
        module2.py
    TestFolder/
        test.py

在此结构中,main.py 导入 module2.pymodule2.py 导入 module1.py。另外 test.py 导入 module2.py.

这个文件夹结构中的导入有两个问题。

当运行宁main.py时,module2.py中的导入如下:

from SubFolder.module1 import *

此处 main.py 的文件夹设置为根文件夹,所有导入均从那里完成。而当我 运行 module2.py 直接导入时应该如下:

from module1 import *

因为现在根文件夹是module2.py的文件夹。这是一个问题,因为现在从不同的文件 运行ning 时需要不断更改导入语句。有解决办法吗?

第二个问题是当我想运行test.py时,这个文件导入module2.py。导入方式应该是:

from ..SubFolder.module2 import *

但这给出了以下错误信息:

    from ..SubFolder.module2 import *
ImportError: attempted relative import with no known parent package

我已经查看了很多解决方案,但找不到有效的解决方案。有什么办法可以解决这个问题吗?

有没有人可以向我解释如何解决这些问题?

我已经看过这个:Relative imports in Python 3,但这并不能解决我的问题。

我建议您只在子文件夹中创建空 __init__.py 文件,然后按如下方式导入它: from subFolder.module1 import *.

创建一个 __init__ 文件

program/
    main.py
    SubFolder/
        __init__.py
        module1.py
        module2.py
    TestFolder/
        test.py

__init__.py中,导入同一目录下的所有文件

from SubFolder.module1 import *
from SubFolder.module2 import *

main.py 中,导入子文件夹

from Subfolder import *
function_inside_module1()

现在您可以访问模块 1 和模块 2 中的任何对象。
__init__.py 在 class 函数中的工作方式与 def __init__ 相同,
一旦导入父目录(模块),它将自行执行。
所以在main.py中,它将被执行为:

from SubFolder.module1 import *
from SubFolder.module2 import *
function_inside_module1()

注意:使用import Subfolder你需要这样调用函数:

import Subfolder
Subfolder.function_inside_module1()

我们现在来看模块2的导入问题,这个在创建__init__.py的时候就已经解决了。因为现在 python 将其视为一个模块,可以在任何地方导入。
在模块 2 中,

from SubFolder.module1 import *

现在可以在任何工作目录下工作

test.py

相同
from SubFolder.module2 import *

也适用于 test.py

警告:不要在模块文件中执行此操作并期望正常结果

#  in module1:
from SubFolder.module1 import *
#  AND in module2:
from SubFolder.module2 import *

这将导致循环导入并导致导入错误或名称未定义