FastAPI中使用绝对地址,但是无法引用,为什么?

新手上路,请多包涵

我在fastapi里使用绝对地址引入一个类,会报错?为什么呢,我看别人都是可以的
image.png

百度过很多了,都没解决,有大佬帮忙看看吗?

阅读 2.4k
avatarAI BotBETA

这个问题可能是由多种原因导致的,但最常见的原因可能是以下几点:

  1. 路径问题:确保你提供的绝对路径是正确的。绝对路径应该是从项目的根目录开始的,或者是一个有效的Python模块路径。
  2. Python环境:确保你的Python环境(虚拟环境或非虚拟环境)已经安装了所有必要的依赖,并且这些依赖的路径也被正确地包含在你的Python路径中。
  3. 导入语句:检查你的导入语句是否正确。例如,如果你正在尝试导入一个名为MyClass的类,并且它位于my_module模块中,那么你应该使用from my_module import MyClass来导入它。
  4. 文件结构:确保你的文件结构符合Python的导入规则。例如,你不能从一个包(目录包含__init__.py文件)外部直接导入包内的模块。
  5. FastAPI的特定问题:尽管FastAPI通常不会对导入方式有特殊的限制,但是如果你在一个特定的FastAPI路由或依赖项中使用绝对导入,并且这个路由或依赖项被当作一个独立的Python脚本来运行,那么这可能会导致问题。确保你的FastAPI应用被当作一个模块或包来运行,而不是一个脚本。

为了更准确地诊断问题,我需要看到更多的代码和上下文信息。例如,你的项目结构、你尝试导入的类的代码、以及你尝试导入它的代码。不过,基于你目前提供的信息,我建议你首先检查上述常见的问题点。

5 个回答

改写成 from code.utils import Response

导入跟python的查找路径有关, 你的入口文件是index.py, 你可以用index文件所在目录下的路径from utils.Response import Response, 或者自身文件所在包的相对路径from ..utils.Response import Response, 如果实在需要像图中这样写, 需要把code目录的父目录加入到查找路径, 可以在index.py中加入以下代码

import sys
path = 'fastapi-gwxz的绝对路径'
# 或者以下方式
# path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(path)

但是这种方式有的ide无法正确提示导入

这个应该是工作路径的问题,你必须在code文件夹所在的目录运行cmd命令,比如cmd命令cd {code所在路径},如果在D盘,就输入一个d:再回车,然后运行python xxx.py

根据你的目录和报错截图看到有一个问题,就是 index.py 中导入 apis.data 的话,应该是 from code.apis.data import api_data 而不是 from apis.data import api_data

其他的用法应该没问题,从 index.py 作为运行文件的话,uvicorn code.index:app --host 0.0.0.0 --port 9000 这种应该就没事,我的平常也是这么使用的,目录结构与你相同。

新手上路,请多包涵

看你的项目 目录节结构 , 显然index.py 不是在code 目录(项目根目录)下。
index.py 移动到code/目录,再试。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题