Python-尝试在没有已知父包的情况下进行相对导入
具有以下文件夹结构:Python-尝试在没有已知父包的情况下进行相对导入,python,Python,具有以下文件夹结构: foo.py dir/ bar.py 我正试图从bar.py导入foo.py中的函数,如下所示: bar.py from ..foo import func def func(): pass foo.py from ..foo import func def func(): pass 但我得到: ImportError: attempted relative import with no known parent package 我该
foo.py
dir/
bar.py
我正试图从bar.py
导入foo.py
中的函数,如下所示:
bar.py
from ..foo import func
def func():
pass
foo.py
from ..foo import func
def func():
pass
但我得到:
ImportError: attempted relative import with no known parent package
我该怎么做
ps:
\uuuu init\uuuuu.py
文件在两个级别都有,但被省略了。假设您的结构如下:
root/
foo.py
dir2/
bar.py
在bar.py
中,可以执行以下操作:
import sys
path = "the/absolute/path/to/root"
sys.path.append(path)
from foo import func
# your code here
我用它来处理这个问题
pip install repackage
import repackage
repackage.up()
from foo import func
在很多情况下,重新包装可以使相对进口变得非常容易不确定答案,但很高兴投票支持这个问题,因为有一个很好的最小重复性的例子和一个对其他人可能有用的通用问题。@alani谢谢。请随意给出你的答案。Leminnguyenhust的答案如果被我写的评论修改的话,对你有用。(在其当前形式中,仅当当前目录是
root
的父目录时,它才起作用)当出现该错误时,您如何运行bar.py?它是顶级脚本还是由其他东西导入的?可能会有帮助:您使用“root”
是有问题的,因为它假设了流程的当前工作目录。与\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这是个好主意。但是当您在vscode
上运行代码时,使用root
就足够有效了