You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从子目录导入模块 解决No module named 'src'报错

问题背景

项目目录结构示意图
需要在examples/borrow.py中导入以下内容:

  • 从src/v1/lend/borrow.py导入函数:prepareAddEscrowTransactions、prepareBorrowTransactions、prepareRepayTransaction
  • 从src/v1/lend/costants/testnetCostants.py导入常量:TestnetOracle、TestnetReserveAddress、TestnetTokenPairs
  • 从config模块导入对象:algodClient、sender

使用如下导入语句运行时抛出错误:

from src.v1.lend.borrow import prepareAddEscrowTransactions, prepareBorrowTransactions, prepareRepayTransaction
from src.v1.lend.costants.testnetCostants import TestnetOracle, TestnetReserveAddress, TestnetTokenPairs
from config import algodClient, sender

报错信息:ModuleNotFoundError: No module named 'src'

报错原因

Python导入模块时的搜索路径默认包含三类:当前执行脚本的所在目录、PYTHONPATH环境变量指定的路径、Python安装目录的默认包路径。
直接运行examples/borrow.py时,解释器的搜索路径仅覆盖examples/目录,无法识别同级的src目录和根目录下的config模块,因此触发模块找不到的错误。

解决方法

二选一即可:

方法1:脚本内动态添加项目根目录到搜索路径(适合单脚本快速调试)

在examples/borrow.py的最开头,所有业务导入语句之前,添加如下代码,将项目根目录注入Python搜索路径:

import sys
from pathlib import Path
# 当前文件的上一级目录即为项目根目录(src、config.py所在层级)
PROJECT_ROOT = Path(__file__).parent.parent.resolve()
sys.path.append(str(PROJECT_ROOT))

# 原有导入语句无需修改,直接放在后面即可
from src.v1.lend.borrow import prepareAddEscrowTransactions, prepareBorrowTransactions, prepareRepayTransaction
from src.v1.lend.costants.testnetCostants import TestnetOracle, TestnetReserveAddress, TestnetTokenPairs
from config import algodClient, sender

注意:不要cd到examples目录下执行脚本,建议在项目根目录下通过路径指定脚本运行,避免相对路径计算偏差。

方法2:以模块模式运行脚本(符合Python项目规范,推荐)

不需要修改任何导入代码,打开终端切换到项目根目录(即src、examples、config.py所在的目录层级),使用-m参数以模块形式执行脚本:

python -m examples.borrow

这种模式下Python会自动将当前终端所在的项目根目录加入模块搜索路径,原有导入逻辑可以正常生效。
如果是长期维护的正式项目,建议在根目录添加pyproject.toml配置文件,将项目以可编辑模式安装到本地环境,后续任意位置运行脚本都不会出现路径导入问题。

内容的提问来源于stack exchange,提问作者Simospa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:51:20