我有一个Python 3项目,我想通过AWS Codestar-> Codepipeline-> Codebuild-> Cloudformation部署到AWS Lambda。我的项目(实际上只包含一个简单的API Gateway处理程序)导入了一个Python 3(需要3)项目(newspaper)。我在家里的电脑上使用Virtualenv 15.1.0,如果我使用Python 3.5安装Newspaper并上传到Lambda(Python 3.6运行时),它会抛出与PIL / Pillow相关的错误。首先,它说找不到_image,通过删除site-packages中的PIL目录解决了这个问题,但这只会导致它抛出找不到PIL的错误。然而,如果我使用Python 3.6构建,然后上传到Lambda,它就可以正常工作(无论我是否删除PIL)。所以,对我来说,我不能使用3.5安装Newspaper并尝试在3.6运行时执行。现在我正在尝试通过Codestar部署,但是Codestar似乎默认为aws/codebuild/eb-nodejs-4.4.6-amazonlinux-64:2.1.3,即使是Python项目,Yum存储库中似乎只有Python 3.5可用,当然Lambda只有3.6运行时。即使我在Codebuild内部切换映像,也似乎没有任何使用Python3.6运行时的映像(根据文档)。甚至Docker映像似乎也缺少Python 3.6。因此,在buildspec.yml文件的INSTALL阶段中,我正在尝试在Codebuild中安装Python 3.6,但是安装后找不到python3*可执行文件。我唯一能想到的其他方法是创建Codestar项目,编辑codebuild以使用Ubuntu,然后安装所有内容(就像我在本地做的那样),但是没有办法从Codestar内部执行该操作,而且我感觉这可能会让我陷入一个兔子洞里,这几乎无法自动化。有没有办法在我的项目中将该配置作为代码自动配置?我的问题如下:
1. 如何将Python 3.6放入从Codestar项目提供的Codebuild环境中? 2. 我应该继续尝试从源代码构建它还是切换到Ubuntu环境? 3. 如何自动配置映像/环境在我的代码/项目中?
1. 如何将Python 3.6放入从Codestar项目提供的Codebuild环境中? 2. 我应该继续尝试从源代码构建它还是切换到Ubuntu环境? 3. 如何自动配置映像/环境在我的代码/项目中?
编辑1 对于其他人,我完整的buildspec.yml用于安装和使用Python3.6如下。注意,它保持尽可能的静默,以减少日志消息,降低Cloudwatch成本并加快进程。通过这样做(安装Python和构建我的应用程序),我最终节省了约90秒的整个过程时间。由于CodeBuild根据所花费的时间收费,这非常关键。
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
yum -y install openssl-devel
解决了pip SSL错误。 - khstacking.yml
文件吗?我正在尝试使用 3.7 版本运行 Django。 - Arturo