Flask应用pip安装到虚拟环境后找不到config配置模块如何解决
Flask应用打包部署后config配置文件无法识别解决方案
问题根源
你当前出现报错的核心原因有三个:
- 打包配置
setup.py未将config.py纳入分发文件列表,pip安装时该文件没有被安装到目标虚拟环境中 - 你在入口文件中添加根目录到系统路径的代码未生效:仅执行了
os.path.abspath(os.path.dirname(__file__))计算路径,没有将结果插入sys.path,Python无法搜索到config.py所在的目录 app/__init__.py中直接将config作为顶级模块导入,pip安装后config.py的存放位置不在Python默认的模块搜索路径中
可选解决方案
方案一:将配置文件整合到应用包内(推荐,无路径兼容问题)
- 把项目根目录的
config.py移动到app/包目录下 - 修改
app/__init__.py中的配置加载代码,改为导入包内的config模块:
# 顶部导入同包下的config模块 from . import config # 后续修改配置加载逻辑 app.config['SECRET_KEY'] = 'secret-key-goes-here' env = app.config['ENV'] if env == "production": app.config.from_object(config.Config) elif env == "development": app.config.from_object(config.ConfigDevelopment) elif env == "local": os.environ['AUTHLIB_INSECURE_TRANSPORT'] = '1' app.config.from_object(config.ConfigLocal)
- 确保
setup.py中配置了正确的包扫描逻辑,示例:
from setuptools import setup, find_packages setup( name="energy", version="1.0", packages=find_packages(), include_package_data=True, # 其他依赖、描述等配置保持不变 )
方案二:保留config.py在项目根目录(方便后续修改配置)
- 补全入口文件的路径注入代码,将根目录加入Python搜索路径:
import sys import os from flask import logging # 计算入口文件所在的根目录,插入到模块搜索路径最前面 BASE_DIR = os.path.abspath(os.path.dirname(__file__)) sys.path.insert(0, BASE_DIR) from app import app if __name__ == "__main__": gunicorn_logger = logging.getLogger('gunicorn.error') app.logger.handlers = gunicorn_logger.handlers app.logger.setLevel(gunicorn_logger.level) app.run()
- 修改
setup.py,将config.py添加到分发文件列表:
from setuptools import setup, find_packages setup( name="energy", version="1.0", packages=find_packages(), # 将config.py安装到目标环境的根目录 data_files=[('.', ['config.py'])], include_package_data=True, # 其他依赖、描述等配置保持不变 )
内容的提问来源于stack exchange,提问作者shalama
相关产品推荐
相关产品推荐

