从不同包导入时的相对导入错误

潘卡吉·米什拉

我的项目结构是这样的 -

<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。

Mr_and_Mrs_D

删除 sys.path hack 和__init__.py<project_name> 然后从 <project_name> 运行你的脚本:

python -m src.modelling.train

这是运行脚本的正确方法(来自根包的父目录,在您的情况下是 src)。导入旨在以这种方式工作,但在从其包运行脚本时则不然,您应该避免这样做

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章