关于如何在Python项目中构建文件和文件夹的文章很多。还写道,应避免相对进口。但是我不知道如何。
这是示例项目结构(将其想象为上游代码存储库)。
Foo
├── foo
│ ├── bar.py
│ ├── __init__.py
│ └── __main__.py
└── run.sh
__init__.py
为空,仅指示foo
是一个软件包。
我使用run.sh
脚本运行该项目。
#!/usr/bin/env bash
python3 -m foo
这是我的__main__.py
,展示了导入bar.py
的两种方法。
#!/usr/bin/env python3
# works
#from . import bar
# do not work
import bar
if __name__ == '__main__':
bar.do()
要点是,只有第一个(当前未注释)有效。当我使用第二个时,运行run.sh
时收到此错误消息。
ImportError: No module named 'bar'
答案 0 :(得分:2)
好吧,这是因为 没有bar
。
相反,它是foo.bar
。
在foo
上下文中运行时,.
点表示foo
,
因此.bar
是foo.bar
。
您的MWE中的解决方案是以这种方式修改导入行
from foo import bar