我正在尝试在Elastic Beanstalk中设置django环境。当我尝试通过requirements.txt文件安装时,我遇到了python3.6问题。
File "/opt/python/run/venv/bin/pip", line 4, in <module>
import re
File "/opt/python/run/venv/lib64/python3.6/re.py", line 142, in <module>
class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'
在这是一个问题时,我无法正确设置环境。一些搜索引导enum34
模块作为问题的原因,但是当我尝试ssh到我的EB环境并使用以下方法删除它时:
/opt/python/run/venv/bin/pip3 uninstall enum34
我得到了同样的错误,表明venv在某种程度上被打破了。我该如何解决这个问题?这是我传递给环境以供参考的扩展文件:
django.config:
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: yahoo_serp/wsgi.py
aws:autoscaling:launchconfiguration:
InstanceType: t2.large
packages:
yum:
libjpeg-turbo-devel: []
DB-migrate.config
container_commands:
01_migrate:
command: "./manage.py migrate"
leader_only: true
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: yahoo_serp.settings
答案 0 :(得分:6)
该问题是由带有Python3.6的AWS Elastic Beanstalk引起的,由于某种原因,在“ eb deploy”上,pip忽略了setup.py的限制:
install_requires = [
'enum34>1.1.0;python_version<"3.4"',
]
并尝试安装enum34。
我使用的解决方法是创建一个部署前挂钩,该挂钩将在部署期间pip install -r requirements.txt之后立即删除enum34软件包和分发信息。
要实现这一目标:
00_fix_enum.config
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/uninstall_enum34.sh":
mode: "000755"
owner: root
group: root
content: |
rm -f -r /opt/python/run/venv/lib/python3.6/site-packages/enum && rm -f -r /opt/python/run/venv/lib/python3.6/site-packages/enum34-1.1.10.dist-info
uninstall_enum34.sh
将在/opt/elasticbeanstalk/hooks/appdeploy/pre/
文件夹中创建,然后在预部署期间运行。答案 1 :(得分:2)
我有同样的问题,通过从需求中删除django-enumfields来解决它。最重要的部分是在更改后重建Elastic Beanstalk 环境。
如果您仍想使用enum34包,请尝试使用enum-compat(并重建Elastic Beanstalk)。