在AWS Elastic Beanstalk部署Flask应用遇依赖问题求助
解决AWS部署Flask应用的两个依赖问题
问题1:cryptography要求setuptools 18.5或更高版本
你之前尝试的配置文件没生效,大概率是配置文件的路径或格式问题。AWS Elastic Beanstalk的扩展配置需要放在项目根目录的.ebextensions文件夹下,并且要严格遵循YAML缩进格式。
修复步骤:
- 在项目根目录创建
.ebextensions文件夹(如果还没有的话) - 在该文件夹内新建
01_upgrade_setuptools.config文件,内容如下:
commands: 01_upgrade_setuptools: command: "/opt/python/run/venv/bin/pip install --upgrade setuptools>=18.5" leader_only: true
- 同时,建议在
requirements.txt的最顶部添加一行,确保安装cryptography前先升级setuptools:
setuptools>=18.5 cryptography==2.2.2 # 其他依赖...
这样部署时会先升级setuptools,再安装cryptography,就能解决第一个错误了。
问题2:Python3.6下enum模块缺少IntFlag属性
这个问题的核心是:Python3.6已经内置了enum模块,且新增了IntFlag类,但如果环境中存在第三方的enum34包(这个包是给Python3.4之前的版本用的),会覆盖内置的enum,导致找不到IntFlag。
修复方案:
- 清理requirements.txt:检查你的
requirements.txt,如果有enum34这个依赖,直接删除它。 - 强制卸载enum34:在
.ebextensions里添加一个前置命令,确保部署时先卸载enum34,再安装依赖。修改或新增02_fix_enum.config文件:
commands: 01_uninstall_enum34: command: "/opt/python/run/venv/bin/pip uninstall -y enum34 || true" leader_only: true 02_install_dependencies: command: "/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt" leader_only: true
(|| true是为了避免如果enum34不存在时命令报错中断部署)
3. 检查间接依赖:如果requirements.txt里没有enum34,但还是被安装了,说明是某个依赖间接引入的。你可以本地运行pip show enum34查看哪个依赖需要它,然后尝试升级该依赖到不再需要enum34的版本。
按照以上步骤操作,应该就能解决这个属性错误了。
内容的提问来源于stack exchange,提问作者cruise_lab
相关产品推荐
相关产品推荐

