我的项目结构是这样的 -
<project_name>
--Makefile
--src
-- __init__.py
-- utils
-- __init__.py
-- general_imports.py
-- variable named X
-- modelling
-- train.py
我的 train.py 模块看起来像这样 -
import sys
sys.path.insert(0,'../../src/')
from utils.general_imports import *
print("Value of X is ",X)
现在,如果我从存在train.py的目录中运行代码,这可以正常工作,但我不想要那样。我想制作一个配方,以便它可以从根目录级别运行,就像这样 -
make train
示例 Makefile -
train:
python src/modelling/train.py
请注意 Makefile 位于项目根目录中。
当我尝试像这样从根级别运行我的train.py 时- python src/modelling/train.py
,它给了我错误 - ModuleNotFoundError: No module named 'src/modelling/train'。
为了克服这个问题,我尝试像这样编辑路径 -sys.path.insert(0,'../../../<project_name>')
并且也在__init__.py
根级别添加空,但这似乎也不起作用。
有人可以帮忙吗?另外,请提出任何更好的方法来实现这一目标。
PS:如果可能的话,我不想顺便添加/修改 PYTHONPATH。
删除 sys.path hack 和__init__.py
<project_name> 然后从 <project_name> 运行你的脚本:
python -m src.modelling.train
这是运行脚本的正确方法(来自根包的父目录,在您的情况下是 src)。导入旨在以这种方式工作,但在从其包运行脚本时则不然,您应该避免这样做
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句