0

既然关于相对进口的问题太多了,我会尽量简短和甜美的。是的,我已经阅读了“第 10 亿次相对进口”。

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

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

例如,我希望能够调用make preprocessingor make trainwhich then run process.pyor or train_model.pywith

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

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

现在,我的问题是我可能在不同的子模块之间存在依赖关系,例如train_model.pyand process.py。具体来说,如果我尝试使用导入,则会收到process错误消息。以类似的方式,我尝试过,这给了我另一个错误:.train_modelfrom src.preprocessing import processImportError: No module named 'src'from ...preprocessing import processSystemError: Parent module '' not loaded, cannot perform relative import

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

4

1 回答 1

0

使用PYTHONPATH. 我会这样做:

生成文件:

export PYTHONPATH=$(abspath src)

train:
    python3 src/model/train_model.py

训练模型.py:

from preprocessing import process

现在每次导入都会先看下src. 不习惯这样写from src.preprocessing import process——通常导入被理解为在某个基本目录中(你不想设置PYTHONPATH到上面的目录src,因为它可能包含你不想导入的东西)。

于 2018-02-24T06:20:29.660 回答