在没有相对导入的情况下运行python项目

时间:2019-08-18 21:32:52

标签: python-3.x

关于如何在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'

1 个答案:

答案 0 :(得分:2)

好吧,这是因为 没有bar

相反,它是foo.bar

foo上下文中运行时,.点表示foo, 因此.barfoo.bar

您的MWE中的解决方案是以这种方式修改导入行

from foo import bar