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

Python 3 Flask项目无法导入相对模块,如何实现跨目录导入?

问题原因

你在auth目录下直接执行flask run时,Python默认将当前工作目录加入模块搜索路径,相对导入..config需要访问auth的上级目录shared,但当前搜索路径中没有包含shared所在层级,找不到对应模块因此触发崩溃。

解决方案

方案1:调整启动路径(最推荐,无侵入)

相对导入语法只能在包内部模块使用,只要从项目根目录启动即可兼容原有导入代码:

  • 切换到可以直接看到shared文件夹的项目根目录
  • 执行以下命令配置Flask入口(zsh环境):
    export FLASK_APP=shared.auth.processor:app
    
  • 直接执行flask run即可,原有from ..config.params import get_key代码不需要修改。

方案2:手动添加模块搜索路径(临时调试用)

如果需要保留在auth目录下启动的习惯,可以在processor.py的导入语句前添加路径配置,改用绝对导入:

import sys
import os
# 将shared的上级目录加入Python搜索路径
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")))

from flask import Flask
from shared.config.params import get_key # 改用绝对导入
app = Flask(__name__)

class processor:
    @app.route("/process")
    def cur_processor():
       #some code

方案3:安装本地shared包(长期开发推荐)

如果shared是项目通用工具包,可以在shared的同级目录新增setup.py文件:

from setuptools import setup, find_packages
setup(
    name="shared",
    version="0.1",
    packages=find_packages(),
)

执行pip install -e .将shared安装为开发模式依赖,之后任意位置都可以直接通过from shared.config.params import get_key导入模块,不需要考虑路径问题。

注意事项

  • 不建议将Flask实例和业务类放在同一个模块,最好抽离到单独的入口文件,避免后续出现导入循环问题。
  • 相对导入不能用于直接作为入口执行的模块,这是Python的语法限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:57:00