如何处理python 3.6中的“平面”相对导入?

时间

由于相对进口的问题太多,我会尽可能简短和甜蜜。是的,我已经阅读了“第 10 亿次相对进口”。

我有一个这样的项目结构:

.
├── Makefile
└── src
    ├── __init__.py
    ├── model
    │   └── train_model.py
    └── preprocessing
        └── process.py

在这里我希望能够到,作为一个例子,电话make preprocessingmake train然后运行或者process.pytrain_model.py

## Make train
train:
    python3 src/model/train_model.py

例如,模块将始终来自 Makefile 所在的顶级项目文件夹。

现在,我的问题是我可能在不同的子模块之间存在依赖关系,例如train_model.pyprocess.py特别是,如果我尝试导入processtrain_model利用from src.preprocessing import process我得到一个错误ImportError: No module named 'src'同样,我尝试了from ...preprocessing import process,这给了我另一个错误:SystemError: Parent module '' not loaded, cannot perform relative import

if __name__ == '__main__':的末尾使用train_model.py,但我似乎无法弄清楚,python 如何使用__name__来查找不同的模块,以及这个 f**** 在这个过程中是否有问题。

约翰·兹温克

使用PYTHONPATH. 我会这样做:

生成文件:

export PYTHONPATH=$(abspath src)

train:
    python3 src/model/train_model.py

train_model.py:

from preprocessing import process

现在每次导入都会首先查看src. 写入不是常规的from src.preprocessing import process- 通常导入被理解为在某个基本目录中(您不想设置PYTHONPATH为上面的目录src,因为它可能包含您不想导入的内容)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章