首页 > 解决方案 > 解析 python 命名空间包中的相对导入

问题描述

我的python目录结构如下

├── a
│   └── b
│       └── c
│           └── d
│               ├── bar.py
│               └── foo.py

└── sandbox.py

目录a/*是自动生成的代码,所以假设我无法控制它的结构。

酒吧.py

def toto():
    pass

foo.py(故意不从 a 导入)

from b.c.d.bar import toto

def baz():
    pass

沙盒.py

from a.b.c.d.foo import baz


if __name__ == '__main__':
    baz()

代码以ModuleNotFoundError: No module named 'b'. 有没有办法绕过这个错误而不做任何改变a/*setuptools我记得在使用 pythons和安装之前能够实现这一点a,但不幸的是无法重现它。

标签: python-3.xpackage

解决方案


这不是问题的真正答案,因为它违反了我的问题的限制,所以我不会将其发布为已接受的答案。

如果您能够添加单个文件,则为解决方案。

在里面a/__init__.py我补充说:

import sys
import os
sys.path.append(os.path.dirname(__file__))

推荐阅读