Elastic Beanstalk中的enum34问题

时间:2017-11-21 12:50:50

标签: python django amazon-web-services pip

我正在尝试在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

2 个答案:

答案 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软件包和分发信息。

要实现这一目标:

  1. 在eb扩展文件夹中创建一个文件。 00_fix_enum.config
  2. 在文件上放置以下内容:
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
  1. 提交更改并运行eb-deploy。文件uninstall_enum34.sh将在/opt/elasticbeanstalk/hooks/appdeploy/pre/文件夹中创建,然后在预部署期间运行。

答案 1 :(得分:2)

我有同样的问题,通过从需求中删除django-enumfields来解决它。最重要的部分是在更改后重建Elastic Beanstalk 环境。

如果您仍想使用enum34包,请尝试使用enum-compat(并重建Elastic Beanstalk)。