从不同包导入时出现相对导入错误
Relative import error when importing from different package
我的项目结构是这样的-
<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
示例生成文件 -
train:
python src/modelling/train.py
请注意 Makefile 位于项目根目录中。
当我尝试从根级别 运行 我的 train.py 时 - python src/modelling/train.py
,它给我错误 - ModuleNotFoundError: 没有名为 'src/modelling/train'.
的模块
为了克服这个问题,我尝试像这样编辑路径 -- sys.path.insert(0,'../../../<project_name>')
并且也在根级别添加空的 __init__.py
,但这似乎也不起作用。
有人可以帮忙吗?另外,请提出任何更好的方法来实现这一目标。
P.S:如果可能的话,我不想绕过 add/modify PYTHONPATH。
从 中删除 sys.path hack 和 __init__.py
,然后从 中删除 运行 您的脚本,如:
python -m src.modelling.train
这是 运行 脚本的正确方法(从根包的父目录,在您的例子中是 src)。导入应该以这种方式工作,但当 运行 从其包中调用脚本时,您应该避免这样做
我的项目结构是这样的-
<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
示例生成文件 -
train: python src/modelling/train.py
请注意 Makefile 位于项目根目录中。
当我尝试从根级别 运行 我的 train.py 时 - python src/modelling/train.py
,它给我错误 - ModuleNotFoundError: 没有名为 'src/modelling/train'.
为了克服这个问题,我尝试像这样编辑路径 -- sys.path.insert(0,'../../../<project_name>')
并且也在根级别添加空的 __init__.py
,但这似乎也不起作用。
有人可以帮忙吗?另外,请提出任何更好的方法来实现这一目标。
P.S:如果可能的话,我不想绕过 add/modify PYTHONPATH。
从 __init__.py
,然后从
python -m src.modelling.train
这是 运行 脚本的正确方法(从根包的父目录,在您的例子中是 src)。导入应该以这种方式工作,但当 运行 从其包中调用脚本时,您应该避免这样做