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

Flask生产部署:setup.py运行时无法导入config.py问题求助

嘿,这个问题我之前部署Flask应用的时候也碰到过!核心原因就是你安装应用后,根目录的config.py根本没被打包到虚拟环境里,Python自然找不到它。

当你跑setup.py install的时候,只有app文件夹里的内容会被安装到虚拟环境的site-packages目录,而根目录的config.py不在find_packages()扫描的范围内,所以完全没被包含进去。接下来给你两个解决办法,优先推荐第一个,更规范:

方案1:把配置文件移到app包里面(最省心)

这是符合Python包结构规范的做法,步骤超简单:

  1. 把根目录的config.py直接拖到app文件夹里,现在项目结构变成这样:
├── app
│ ├──__init__.py
│ ├──config.py  # 现在在这里啦
│ ├──forms.py
│ ├──models.py
│ ├──routes.py
│ ├──server.py
│ ├──static
│ │ └──css
│ └──templates
│ ├── base.html
│ ├── [...]
├──app.py
└──setup.py
  1. 修改app/__init__.py里的导入语句,从绝对导入改成相对导入:
# 原来的写法
from config import Config
# 改成下面这样
from .config import Config

这样改完,config就属于app包的一部分了,安装时会被一起打包到site-packages,Python运行flaskapp命令时就能轻松找到它。

方案2:保留根目录的config.py,修改setup.py打包它

如果你实在不想移动配置文件,那得让setup.py把config.py也装进去,同时调整代码里的导入逻辑:

  1. 修改setup.py,添加data_files参数,把config.py安装到和app包同级的目录:
setup(
    # ... 其他参数保持不变
    data_files=[('', ['config.py'])],
    # ... 剩下的参数也不变
)
  1. 然后在app/__init__.py里,得手动把安装目录加到Python的搜索路径里,才能导入config:
import sys
import os
from flask import Flask

# 找到当前app包的目录,再往上一级就是config.py所在的位置
package_dir = os.path.dirname(os.path.abspath(__file__))
root_dir = os.path.dirname(package_dir)
sys.path.append(root_dir)

from config import Config
app = Flask(__name__)
app.config.from_object(Config)
# ... 其他代码不变

不过这个方案不如第一个省心,不同环境下可能还会有路径问题,所以优先选方案1哈。

顺带提个小bug:server.py里的导入错了

看你的app/server.py里写的是from .app import app,但你的app包里面根本没有app.py啊!app实例是定义在app/__init__.py里的,所以得改成:

# 原来的错误写法
from .app import app
# 改成正确的
from . import app

不然等下解决了config的问题,又会碰到No module named 'app.app'的错误。

最后重新跑一遍python setup.py build install && flaskapp,应该就能正常启动啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:15:48