繁体   English   中英

如何在python 3.6中处理“扁平”相对导入?

[英]How to handle “flat” relative imports in python 3.6?

由于有关相对进口的问题太多,我将使其尽可能简短和贴切。 是的,我读过“ 十亿次相对进口量 ”。

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

.
├── 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编写from src.preprocessing import process是不常见的-通常将导入理解为位于某个基本目录内(您不希望将PYTHONPATH设置为src上方的目录,因为它可能包含您不想导入的内容)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM