You need to enable JavaScript to run this app. Python绝对/相对导入报ModuleNotFoundError问题求解,附项目结构说明
优惠活动
大模型
产品
解决方案
定价
更多

Python绝对/相对导入报ModuleNotFoundError问题求解,附项目结构说明

问题根因

你的绝对导入写法没有问题,报错核心是Python运行时的模块搜索路径(sys.path)未包含你的项目根目录/home/pi/crypto,因此解释器无法识别src作为顶层包。你之前添加的sys.path修改代码未生效,是因为同目录其他文件的导入逻辑在你修改sys.path之前就已经执行,因此还是会触发模块找不到的错误。

解决方案

方案1:无需修改项目结构/代码(最推荐)

直接在项目根目录(crypto目录)下,用Python的-m参数以模块方式运行脚本,不要直接运行py文件:

python -m src.ethMessage

注意不要加.py后缀,路径用.分割即可
-m参数会自动将当前工作目录加入sys.path,你现有的绝对导入写法可以直接生效,不需要修改任何代码。

方案2:临时指定PYTHONPATH环境变量

如果不想每次都加-m参数,可以在运行脚本前临时设置PYTHONPATH为当前项目根目录:

  • Linux/Mac 终端:
export PYTHONPATH=$(pwd) && python src/ethMessage.py
  • Windows CMD:
set PYTHONPATH=%cd% && python src\ethMessage.py
  • Windows PowerShell:
$env:PYTHONPATH=$PWD.Path; python src\ethMessage.py

方案3:调整项目结构一劳永逸

如果需要频繁运行脚本,也可以调整项目结构避免每次加参数:

  1. 在项目根目录新建scripts文件夹,把所有需要直接运行的脚本从src目录移到scripts下,调整后结构如下:
- config
- data
- src
    - resources 
    - db
- test
- scripts
    - ethMessage.py
    - 其他可执行脚本
  1. 所有代码的导入保持原绝对导入写法from src.xxx import xxx即可,运行时在根目录下直接执行:
python scripts/ethMessage.py

可选:原sys.path修改代码的正确写法

如果你坚持要在代码里加路径修改逻辑,必须把这段代码放在所有导入语句的最前面,甚至要放在导入同目录其他py文件的前面,示例如下:

import os
import sys
# 第一时间修改sys.path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
# 后面再写其他导入逻辑
import update_db
from db.mysql_main import insertValueAndFee

该方式不推荐,跨环境运行容易出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:39:02