【问题标题】:enum34 issue in Elastic BeanstalkElastic Beanstalk 中的 enum34 问题
【发布时间】:2018-05-04 22:40:35
【问题描述】:

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

【问题讨论】:

    标签: python django amazon-web-services pip


    【解决方案1】:

    这个问题是由带有 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/ 文件夹中创建,然后在预部署期间运行。

    【讨论】:

    • 我也有同样的问题。不幸的是,这对我不起作用
    • 你用的是什么python版本?
    • 弹性豆茎的python 3.6。 @Farcorn
    • 我只想更新它已经对我有用。所以问题是脚本执行的顺序。我在/opt/elasticbeanstalk/hooks/appdeploy/pre 中有另一个脚本在您的脚本之前运行,这些脚本使用pip 并失败。所以为了修复它,我只是将你的脚本重命名为00uninstall_enum34.sh 让它先运行。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 2019-08-11
      • 2014-10-19
      • 2023-01-03
      • 2015-01-19
      • 2020-07-18
      • 2018-02-27
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多