Python3从兄弟目录导入模块。

3

为了在Python 3.10项目中创建一个新的结构,我必须将不同的模块从彼此分开并将它们移动到同一层上的不同文件夹中。文件夹结构看起来有点像这样:

Root
-- main.py
-- __init__.py

-- folder1
----- __init__.py
----- a.py

-- folder2
----- __init__.py
----- b.py

我在 a.py 文件中定义了一个函数,代码如下:

# /root/folder1/a.py
def testFunction(text):
    print(text)

在Root init文件中,我这样引用了这个函数:
# /root/__init__.py
from .folder1.a import testFunction as testFunction

所以我试图在文件夹2/b.py中使用文件夹1/a.py中的函数:

# /root/folder2/b.py
from .. import testFunction
text = 'hello World'
testFunction(text)

我在GitHub上搜寻了一些比较大的Python项目,并发现排名靠前的模块参考资料,但是这并没有解决我的问题。

我试过以下的解决方案,但都不起作用:

所以我的问题是,出现了这个错误:

ImportError: attempted relative import with no known parent package

非常感谢您提供的每一个提示和解决方案 :-)

你尝试过使用sys.path.insert和os.path.abspath吗? :) - PicxyB
那么你的问题是什么?你没有包含它。 - BrainFl
我的问题是,总是出现错误:尝试相对导入,但没有已知的父包 --> 谢谢,我忘记提到它了。 - Sunilplayer
1个回答

1
我发现,我可以使用sys.path.append和os.path.abspath来工作。所以解决方案如下:
目录结构:
Root
-- main.py
-- __init__.py

-- folder1
----- __init__.py
----- a.py

-- folder2
----- __init__.py
----- b.py

要在文件夹2/b.py中使用文件夹1/a.py中的testFunction函数,b.py中的代码应该像这样:

import sys
import os

sys.path.append(os.path.abspath('../Root/folder1'))
from a import testFunction

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接