升级Dash 2.0后AWS ElasticBeanstalk出现dcc导入错误如何解决
首先明确你的两个报错根源:
dash==2.0.0rc2是预发布测试版本,pip默认不检索预发布版本,因此直接安装会提示找不到匹配版本- 你的AWS ElasticBeanstalk环境存在Python版本不匹配问题:报错路径显示虚拟环境用的是Python3.8,和你描述的3.7.10环境不一致,也可能导致依赖导入异常
可选方案如下:
方案1:切换为Dash正式发布版本(最推荐)
直接将项目依赖文件(通常是requirements.txt)中的dash版本指定为dash>=2.0.0即可,Dash 2.0及以上正式版完全支持from dash import dcc的写法,且兼容Python3.7及以上版本,不需要预发布参数即可正常安装。
部署前建议清空原有EB虚拟环境的旧依赖,重新安装正式版依赖即可解决导入错误。方案2:保留rc2版本的安装配置
如果你必须使用2.0.0rc2版本,可在AWS EB的自定义配置文件(.ebextensions目录下的.config文件)中添加安装命令,增加--pre参数允许安装预发布版本:packages: pip: dash: 2.0.0rc2 option_settings: aws:elasticbeanstalk:container:python: WSGIPath: application:application commands: 01_install_pre_dash: command: "pip install --pre dash==2.0.0rc2"该命令会在依赖安装阶段强制拉取预发布版本,满足版本要求。
方案3:添加兼容导入垫片(无侵入修改)
无需修改现有代码中已经写好的from dash import dcc逻辑,只需要在项目入口文件(如app.py、application.py)的最开头添加以下兼容代码即可:# 兼容Dash新旧版本导入语法 try: from dash import dcc, html, Input, Output, callback except ImportError: import dash_core_components as dcc import dash_html_components as html from dash.dependencies import Input, Output, callback无论环境安装的是Dash 1.x还是2.x版本,都可以正常识别
dcc等组件,后续环境正常后也不需要删除这段代码,不会影响运行。方案4:对齐本地与部署环境的Python版本
你的报错信息中虚拟环境路径指向Python3.8,和你声明的3.7.10部署环境不一致,说明EB环境存在多版本Python混用问题。你可以直接将EB的Python平台版本升级到3.8及以上,和本地开发环境完全对齐,消除版本差异带来的依赖兼容问题。
内容的提问来源于stack exchange,提问作者kms

