如何从主目录向子子目录导入Python模块并调用函数?
Python跨目录导入Database类的解决方案
你的项目结构:
start.py database.py cogs/ __init__.py Utility/ __init__.py utility.py
以下是几种可行的解决方法:
方法1:手动添加主目录到Python路径
在cogs/Utility/utility.py开头添加以下代码,将项目主目录加入Python的搜索路径,之后就能直接导入Database类:
import sys import os # 回溯到项目主目录(当前文件 → Utility → cogs → 主目录) project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.append(project_root) from database import Database
方法2:使用相对导入(需通过主脚本启动)
如果你的项目始终通过主目录的start.py启动(而非直接运行utility.py),可以用相对导入:
from ...database import Database
注意:直接运行utility.py会触发相对导入错误,因为此时它被视为顶层脚本而非包的一部分,必须通过start.py间接加载该模块。
方法3:设置环境变量PYTHONPATH
将项目主目录设置为PYTHONPATH环境变量,让Python全局识别该路径:
- Linux/macOS终端:
export PYTHONPATH=/你的项目主目录绝对路径 - Windows命令行:
set PYTHONPATH=C:\你的项目主目录绝对路径
设置完成后,在utility.py里直接写:
from database import Database
以上三种方法都能支持未来在cogs下添加更多子文件夹的场景,无需额外修改导入逻辑。
内容的提问来源于stack exchange,提问作者kacper1236
相关产品推荐
相关产品推荐

