Python嵌套模块中的类导入失败如何解决?
问题原因
你尝试的from bar.some_class import SomeClass本身语法是正确的,无法导入基本都是Python模块搜索路径匹配失败导致的,常见触发场景是运行脚本的工作目录不对,或者直接运行带相对导入的脚本。
可行解决方法
方法1:调整运行工作目录(最简单,适合直接运行somefile.py的场景)
运行脚本前先进入foo文件夹,再执行启动命令:
cd 你的foo文件夹的实际路径 python somefile.py
此时somefile.py中直接写如下代码即可正常导入:
from bar.some_class import SomeClass
方法2:手动添加模块搜索路径
不需要调整运行目录,在somefile.py开头先插入两行代码,把foo目录加入Python搜索路径:
import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) # 后续正常导入即可 from bar.some_class import SomeClass
方法3:以模块方式运行(适合把foo作为包使用的场景)
如果你需要将foo作为包对外提供引用,不要直接运行somefile.py,在foo的上级目录执行如下命令即可:
python -m foo.somefile
此时somefile.py中还支持使用相对导入写法:
from .bar.some_class import SomeClass
其他尝试写法的问题说明
from bar import some_class:该写法导入的是some_class模块,调用类需要写some_class.SomeClass,无法直接使用SomeClassfrom . import bar.some_class.SomeClass:语法错误,from . import后不能直接跟多层属性,正确相对导入写法参照方法3import bar.some_class:该写法导入的是some_class模块,调用类需要写bar.some_class.SomeClass
内容的提问来源于stack exchange,提问作者Stack Overflow
相关产品推荐
相关产品推荐

