为何无法从上级目录导入模块?相对导入报错咨询
问题分析与解决
报错原因
你用相对导入from .. import utils失败,核心原因是直接运行coderunning.py时,Python没有将它识别为packageName(你目录里写的pacakgeName应该是拼写错误)包的一部分。
当你直接执行python folder1/coderunning.py这类命令时,Python会把这个脚本当作「顶层模块」,它的父级目录不会被视为合法的包结构,自然找不到..对应的父包路径,因此抛出ImportError。
解决方法
方法1:以包模块形式运行脚本
切换到packageName的父目录(即包含packageName文件夹的那个目录),然后用模块方式启动脚本:
python -m packageName.folder1.coderunning
这种方式会让Python将packageName识别为完整的包,相对导入逻辑就能正常生效。
方法2:改用绝对导入
如果不想改变运行方式,可以修改coderunning.py中的导入语句为绝对导入:
from packageName import utils
但要确保packageName的父目录在Python的sys.path中——要么手动通过sys.path.append()添加,要么将该父目录设为当前工作目录。
关于__future__语句的影响
完全没有影响。from __future__ import absolute_import, division, print_function只是启用Python 3的部分兼容特性,其中absolute_import仅改变默认导入行为为绝对导入,但不会干扰你显式编写的相对导入,也不是导致本次报错的原因。
内容的提问来源于stack exchange,提问作者stracc
相关产品推荐
相关产品推荐

