Can anyone explain python's relative imports?
我不能为我的生活得到python的相对导入工作。 我创建了一个它不起作用的简单示例:
目录结构是:
1 2 3 4 5 | /__init__.py /start.py /parent.py /sub/__init__.py /sub/relative.py |
所有其他文件都是空白的。
在命令行上执行以下操作时:
1 2 | $ cd / $ python start.py |
我明白了:
1 2 3 4 5 6 | Traceback (most recent call last): File"start.py", line 1, in <module> import sub.relative File"/home/cvondrick/sandbox/sub/relative.py", line 1, in <module> from .. import parent ValueError: Attempted relative import beyond toplevel package |
我使用的是Python 2.6。 为什么会这样? 如何使这个沙盒示例工作?
您正在从包"sub"导入。即使存在
您需要从
1 2 3 4 5 6 | ./start.py ./pkg/__init__.py ./pkg/parent.py ./pkg/sub/__init__.py ./pkg/sub/relative.py |
使用
1 | import pkg.sub.relative |
现在pkg是顶级包,你的相对导入应该有效。
如果您想坚持使用当前布局,可以使用
如果不将任何内容导入目录树中的脚本,也可以安全地删除顶级
如果要直接调用
这是它应该如何工作:
1 2 3 4 5 6 7 8 9 | # Add this line to the beginning of relative.py file import sys sys.path.append('..') # Now you can do imports from one directory top cause it is in the sys.path import parent # And even like this: from parent import Parent |
如果您认为上述情况可能导致某种不一致,您可以使用此代码:
1 | sys.path.append(sys.path[0] +"/..") |