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

Python导入问题:如何让FastAPI项目中main.py与blog_get.py正常运行?

FastAPI项目导入问题解决与机制解析

一、让main.py和blog_get.py都正常运行的两种方案

方案1:统一从项目根目录启动模块

  • 运行main.py:在项目根目录执行 python main.py
  • 运行blog_get.py:在项目根目录执行 python -m router.blog_get
    这里的-m参数会把router.blog_get当作包的子模块加载,Python会自动将项目根目录加入sys.path,匹配你的绝对导入语句。

方案2:修改sys.path适配直接运行

在blog_get.py开头添加以下代码,手动将项目根目录加入Python的搜索路径:

import sys
from pathlib import Path

# 动态获取项目根目录(router目录的父级就是根目录)
sys.path.append(str(Path(__file__).parent.parent))

# 之后正常使用绝对导入
from router.blog_posts import required_functionality

这样不管是从根目录运行main.py,还是直接运行blog_get.py,导入都能生效。

二、你对Python导入的核心误区

  1. 脚本运行与模块导入的上下文差异

    • 直接运行blog_get.py时,它是顶层脚本,Python默认把脚本所在的router/目录加入sys.path,此时找不到router.blog_posts(因为router目录本身就在搜索路径里,相当于要找router/router/blog_posts)。
    • 运行main.py时,项目根目录被加入sys.path,router是根目录下的包,所以router.blog_posts能被正确识别。
  2. 混淆了直接运行与包模块运行的区别

    • 用python xxx.py运行文件时,文件是独立脚本;用python -m 包.模块运行时,模块是包的一部分,此时Python会以项目根目录为基准加载模块,符合绝对导入的逻辑。
  3. 相对导入的使用限制

    • 相对导入(比如from .blog_posts import ...)只能在被当作包的一部分导入时使用,不能在直接运行的脚本里用。如果直接运行脚本时用相对导入,Python会认为它没有父包,从而报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:25:12