Python3如何从父目录的子目录导入模块?
解决跨目录模块导入问题
首先明确:Python支持从父目录的子目录导入模块,只是你的路径配置和导入方式有误。
针对你的文件结构,给你两种可行的解决方法:
方法一:通过绝对路径配置sys.path
修改app.py中的代码,将backend目录(两个子目录的共同父目录)添加到Python的模块搜索路径中,这样就能正确识别database_layer这个包:
import sys import os # 获取backend目录的绝对路径:先拿到当前文件app.py的绝对路径,再往上跳两级 backend_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(backend_path) # 现在可以正常导入service模块 from database_layer.service import DBService # 替换成你需要的类/函数名
你之前的错误在于,把../database_layer加入了sys.path,这时候Python只会在这个目录下找模块,而database_layer.service这种写法要求database_layer是某个搜索路径下的包,所以自然找不到。
方法二:使用相对导入(需按包方式运行)
如果把整个backend当作一个Python包,你可以用相对导入语法,但不能直接运行app.py,需要从backend的上级目录执行命令:
- 确保
backend、api_layer、database_layer目录下都有__init__.py文件(空文件即可); - 在app.py中使用相对导入:
from ..database_layer.service import DBService
- 从backend的上级目录运行脚本:
python -m backend.api_layer.app
这种方式更符合Python包的规范,但限制是不能直接执行app.py文件。
内容的提问来源于stack exchange,提问作者HRL
相关产品推荐
相关产品推荐

