当前位置: 首页 > 知识库问答 >
问题:

Python 3.6在AWS CodeBuild中不可用,Python 3.5在AWS Lambda中不可用

阎智
2023-03-14

我有一个Python 3项目,我正试图通过AWS Codestar将其部署到AWS Lambda-

我的项目(实际上只是由一个简单的API网关处理程序方法组成)导入了一个Python3(需要3)项目(报纸)。我使用的是VirtualNV15.1。在我的家用计算机上安装0,如果我使用Python 3.5安装报纸,然后上传到Lambda(Python 3.6运行时),它会抛出与PIL/Pillow相关的错误。

首先,它说它找不到_image,这似乎是通过删除站点包中的PIL目录来解决的,但是这只会导致它抛出找不到PIL的错误。

然而,如果我用Python 3.6构建,然后上传到Lambda,它就可以正常工作(无论我是否删除PIL)。

所以,在我看来,我不能用3.5安装报纸,并尝试在3.6运行时执行。

所以,现在我正试图通过Codesar进行部署,但是Codesar似乎默认为aws/codebuild/eb-nodejs-4.4.6-amazonlinux-64:2.1.3,即使是Python项目,而且它在Yum存储库中似乎只有Python 3.5,当然Lambda只有3.6运行时。

即使我在代码构建本身中切换图像,似乎也没有任何使用Python3构建的图像。6运行时(根据文档)。甚至Docker图像似乎也缺少Python3.6。

因此,我试图在buildspec的安装阶段在Codebuild中安装Python 3.6。yml文件,但是我在安装后找不到python3*可执行文件。

我唯一能想到的另一件事是创建Codesar项目,编辑codebuild以使用Ubuntu,然后安装所有东西(就像我在本地做的那样),但是在Codesar内部没有办法做到这一点,我觉得这可能会让我失望兔子洞,这很难自动化。有没有办法在我的项目中将该配置作为代码?

编辑试图从源代码构建和安装Python 3.6作品,但当试图安装Pip,我得到的错误说SSL没有安装。当回顾构建日志时,似乎也没有安装其他“位”。

所以,我的问题是:

  • 如何将Python3.6引入由Codestar项目提供的代码构建环境
  • 我应该继续从源代码构建它,还是切换到Ubuntu环境
  • 如何在代码/项目中自动配置映像/环境

为其他人编辑1,我的完整buildspec。yml用于安装和使用Python3。6在下面。注意,为了减少日志消息、降低Cloudwatch成本并加快进程,它尽可能保持一切安静。我通过这样做(安装Python并构建我的应用程序),最终在整个过程中节省了大约90秒。因为代码构建是基于所花费的时间收费的,所以这是至关重要的。

version: 0.2

phases:
  install:
    commands:
      - yum -qye 0 update
      - yum -qye 0 groupinstall development
      - yum -y install python-devel
      - yum -qye 0 install libxml2-devel libxslt-devel libjpeg-devel zlib-devel libpng-devel openssl-devel sqlite-devel
      - export HOME_DIR=`pwd`
      # I would recommend hosting the tarball in an uncompressed format on S3 in order to speed up the download and decompression
      - wget --no-verbose https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
      - tar -xzf Python-3.6.1.tgz
      - cd Python-3.6.1
      - ./configure -q --enable-loadable-sqlite-extensions
      - make --silent -j2
      - make altinstall --silent
      - cd $HOME_DIR
      - rm Python-3.6.1.tgz
      - rm -rf Python-3.6.1/
      - ln -s /usr/local/bin/python3.6 /usr/bin/python3
      - python3 -m pip install virtualenv
      - pip3 install -U nltk
  pre_build:
    commands:
      - cd $HOME_DIR
      # Start a virtualenv and activate
      - virtualenv -p /usr/bin/python3 $VIRTUAL_ENV_DIR_NAME
      - source $VIRTUAL_ENV_DIR_NAME/bin/activate
      - $VIRTUAL_ENV_DIR_NAME/bin/pip3.6 install nltk
      # If you plan to use any separate resources on Codecommit, you need to configure git
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true
      # git clone whatever you need
  build:
    commands:
      - cd $HOME_DIR
      - mv $VIRTUAL_ENV/lib/python3.6/site-packages/* .
      - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.json
artifacts:
  type: zip
  files:
    - template-export.json

共有3个答案

唐麒
2023-03-14

它也可以将CodeBuild指向dockerhub上的图像。从文档:

要使用其他Docker映像,请选择“指定Docker映像”。对于自定义图像类型,请选择其他或Amazon ECR。如果选择“其他”,则对于“自定义图像ID”,请在Docker Hub中键入Docker图像的名称和标记

我已经将我的代码构建项目设置为使用python:3.6-alpine,并且一切正常。。

太叔涵亮
2023-03-14

现在有一个来自AWS的Python3.6的官方Docker图像。您可以使用aws/codebuild/python: 3.6.5作为您的CodeBuild映像。

谯阳伯
2023-03-14

这就是我的构建规范。yml看起来像。请注意,python3。6版本在预构建阶段输出。

version: 0.2

phases:
  install:
    commands:
      - yum -y groupinstall development
      - yum -y install zlib-devel
      - wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
      - tar xJf Python-3.6.0.tar.xz
      - cd Python-3.6.0
      - ./configure
      - make
      - make install 
  pre_build:
    commands:
      - python3 -V
  ...

另一种方法是上传Python3。6码头工人形象到ECR。您可以设置使用此ECR映像运行生成的选项。

 类似资料:
  • 问题内容: 我正在尝试运行以前运行的应用程序。它曾经在Ubuntu和Windows 7上运行。我现在有一台Windows 10计算机,代码失败。可能是因为我现在使用的是python 3.5,尽管坦率地说我不记得我在其他计算机上(不再可用)上的内容。 关键行是: 不久前已从各个地方取消。但是,现在当我运行它时,它会引发错误: 在交互式会话中,似乎是第三行失败了: 我试过了 在命令提示符下,但错误仍然

  • 问题内容: 在有效Java中,Bloch建议使所有字段最终成为使对象不变的对象。 是否有必要这样做?不只是不提供访问器方法就使其不可变。 例如 上述类是不可变的,即使我不申报的吗?我想念什么吗? 问题答案: 除了@Bozho的要点之外,将字段声明为意味着可以安全地访问它而无需任何同步。 相反,如果该字段不是,则存在另一个风险,即如果另一个线程在没有适当同步的情况下访问该字段,则另一个线程将看到该字

  • 我刚刚开始使用Spring,并且已经成功设置并在Eclipse中使用gradle buildship运行RESTful教程。 https://spring.io/guides/gs/rest-service/#initial 然而,有一件事我无法在Eclipse中使用,那就是它说您可以通过以下命令从gradle而不是jar直接运行应用程序: 格拉德勒·布特伦 但bootRun不是gradle脚本创

  • 我正在使用Ubuntu18:04和lxc/lxd蒸汽容器。它工作得很好,我遵循了本教程,并对网络内容做了一些更改。 https://blog.simos.info/running-steam-in-a-lxd-system-container/ 蒸汽适用于opengl游戏,但不适用于沃肯游戏。卢特里斯也一样。 主办方: 集装箱侧: ubuntu@steam:~$vulkaninfo OpenGL工

  • 问题内容: 我得到了这个,我期望它在打印x.withdraw()时能打印410。 这是我的代码: 我是否需要在类本身中修复某些问题,或者我的方法调用有问题? 问题答案: 您在实例上设置具有相同名称的属性: 您正在尝试调用的是该属性,而不是方法。Python不会区分方法和属性,它们也不位于单独的命名空间中。 为属性使用其他名称;(退出的过去时)作为更好的属性名称浮现在脑海: (我也纠正了一个错字;您

  • 问题 当您在 Adobe Photoshop 中尝试对一个较大的图像使用挤压、球面化、旋转扭曲或水波扭曲滤镜时,这些滤镜会变暗(不可用)。 解决方案 减小图像的像素大小。 其他信息 这些滤镜都有图像像素大小上限: 水波:    8000 x 8000 挤压:      11500 x 11500 球面化:  11500 x 11500 旋转扭曲:       11500 x 11500