Python相对导入失败:报错attempted relative import with no known parent package
解决相对导入报错:
attempted relative import with no known parent package 问题原因
直接运行web/main.py时,Python会把它当作顶层脚本文件,而非server包下的子模块。此时脚本的__package__属性为空,Python无法识别它的父包(即server),自然解析不了..rhino这种相对导入路径。
可行解决方案
方案1:以模块方式运行脚本
从server所在的上级目录(包含server文件夹的目录)执行命令:python -m server.web.main这种方式会让Python把
server当作完整包处理,main.py会被识别为server.web模块,相对导入就能正常找到rhino包。方案2:改用绝对导入
先将server所在目录加入Python搜索路径,再用绝对导入。修改main.py:import sys from pathlib import Path # 把server的上级目录添加到sys.path sys.path.append(str(Path(__file__).parent.parent)) # 绝对导入Rhino类 from server.rhino.app import Rhino若想简化导入,可在
rhino/__init__.py中添加一行:from .app import Rhino之后导入可直接写:
from server.rhino import Rhino方案3:规范项目包结构
在server目录下新建__init__.py,将其转为正式包,之后仍用模块方式运行(参考方案1),或在项目根目录写启动脚本统一调用web/main.py的逻辑。
内容的提问来源于stack exchange,提问作者RHO
相关产品推荐
相关产品推荐

