Python相对导入报错ImportError及绝对导入找不到模块问题求助
大家好,我最近在Python脚本的模块导入上卡壳了,折腾了好几种方法都没解决,想请各位帮忙看看问题出在哪!
先给大家说下我的项目目录结构:
项目根目录/ └── my_scripts/ ├── 04-trial/ │ └── L47_trial.py ├── starting_template.py └── resources/ └── starting_template.py (后来尝试移动过去的版本)
我是从项目根目录执行的运行命令:
python my_scripts/04-trial/L47_trial.py
问题1:相对导入报错
在L47_trial.py里,我想导入上级目录my_scripts/下的starting_template.py里的load_img函数,写了这样的代码:
from ..starting_template import load_img
结果直接报错:
ImportError: attempted relative import with no known parent package
我原本理解的是,相对导入是从当前脚本所在的my_scripts/04-trial/目录往上找一级,就能定位到starting_template.py,但为什么会报错呢?难道Python不允许从当前脚本目录的上级目录导入模块吗?
问题2:绝对导入找不到模块
我想着换绝对导入试试,把代码改成:
from my_scripts.starting_template import load_img
结果又报了新的错误:
ModuleNotFoundError: No module named 'my_scripts'
后来我尝试把starting_template.py移到my_scripts/resources/目录下,VSCode自动帮我重构了导入语句:
from my_scripts.resources.starting_template import load_img
但还是报同样的找不到my_scripts模块的错误,这到底是哪里出问题了?
临时可行但不想用的方法
我试过把starting_template.py直接移到my_scripts/04-trial/目录下,然后把导入语句改成from starting_template import load_img,这样就能正常运行了,但我不想把这个文件放在脚本目录里,还是希望它留在原来的位置。
有没有大佬能帮我分析下问题,给个可行的解决办法呀?
备注:内容来源于stack exchange,提问作者Tms91

