当前位置: 首页 > news >正文

Python import 机制与文件路径问题解析

Python import 机制与文件路径问题解析

  • 问题描述
  • 原因分析:
  • 解决方案:


今天在开发过程中,遇到一个路径文件,排查了一个多小时。。。
import 的路径问题,尤其是在不同模块之间调用时,可能会因为 相对路径错误 。

问题描述

目录结构:

Users/lpp/workspace/DevProject/04LLM应用开发学习/04 ReAct Agent/03 智能客服/
│── agentExecutor.py  # 主程序
└── tools/
    └── query_products_from_db.py  # 查询数据库的模块
    └── SportsEquipment.db  # SQLite 数据库文件

query_products_from_db.py 代码如下:

import sqlite3

def query_by_product_name(product_name):
    conn = sqlite3.connect("SportsEquipment.db")  # 直接使用相对路径
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM products WHERE product_name LIKE ?", ('%' + product_name + '%',))
    rows = cursor.fetchall()
    conn.close()
    return rows

在 agentExecutor.py 中调用:

from tools.query_products_from_db import query_by_product_name

print(query_by_product_name("篮球"))

执行 python agentExecutor.py 时,报错:
在这里插入图片描述

原因分析:

Python import 机制是基于 (当前工作目录)进行的,而不是以模块文件所在目录为基准。

运行 agentExecutor.py 时,Python 认为 “SportsEquipment.db” 是相对于 agentExecutor.py的执行目录(也就是当前目录),而不是query_products_from_db.py 所在的 tools/ 目录。因此,数据库文件未被正确找到。

解决方案:

在 query_products_from_db.py 中使用绝对路径
【第7行注释掉,新增3、4、8行】
在这里插入图片描述

http://www.dtcms.com/a/44268.html

相关文章:

  • vim:基础配置
  • vcredist_x64 资源文件分享
  • Mastercam出现提示“Mastercam提示没有许可证,你有激活码吗”的报错的解决方案
  • 计算机网络——详解TCP三握四挥
  • Linux软硬链接
  • SpringBoot 日志 与 门面模式(外观模式)
  • Anaconda安装(2024最新版)
  • Iceberg Catalog
  • AWS中使用CloudFront分发API Gateway
  • 自学微信小程序的第六天
  • 如何评估所选择的PHP后端框架的性能?
  • 【设计模式】单例模式|饿汉模式|懒汉模式|指令重排序
  • DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順
  • golang 内存对齐和填充规则
  • 【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
  • uvm中的run_test作用
  • C语言基础要素(007):使用变量
  • 自然语言处理NLP入门 -- 第十节NLP 实战项目 2: 简单的聊天机器人
  • uniapp 系统学习,从入门到实战(六)—— 样式与布局
  • [思考记录]AI时代下,悄然的改变
  • 大白话前端性能优化方法的分类与具体实现
  • Python 科学计算生态入门 2 - NumPy 基础与示例
  • Numpy基础知识
  • Highcharts 配置语法详解
  • redis repl_backlog_first_byte_offset 这个字段的作用
  • 安装 Windows Docker Desktop - WSL问题
  • NAT 代理服务 内网穿透
  • 【SQL】MySQL中的字符串处理函数:concat 函数拼接字符串,COALESCE函数处理NULL字符串
  • 详解ESP32使用select函数来监听串口数据
  • 99分巧克力