为 AWS Lambda 打包 Python Pipenv 项目

问题描述 投票:0回答:2

我有一个Python项目,我正在使用pipenv来处理deps。

我需要创建一个 zip 文件,其中包含源代码和所有依赖项代码。我需要这个 zip 文件来将其上传到 AWS Lambda。

使用 Pipenv 时,它会下载计算机中某处的依赖库,但为了打包/分发项目,我需要将所有必要的代码包含在同一位置(一个 zip 文件)。

有没有办法运行pipenv并将其设置为在特定路径安装依赖项?如果没有,有人知道这些依赖项位于我的计算机中的位置吗?

谢谢

python aws-lambda pipenv
2个回答
19
投票

这对我有用:

#!/bin/bash

# this is b/c pipenv stores the virtual env in a different
# directory so we need to get the path to it
SITE_PACKAGES=$(pipenv --venv)/lib/python3.6/site-packages
echo "Library Location: $SITE_PACKAGES"
DIR=$(pwd)

# Make sure pipenv is good to go
echo "Do fresh install to make sure everything is there"
pipenv install

cd $SITE_PACKAGES
zip -r9 $DIR/package.zip *

cd $DIR
zip -g package.zip posts.py

我专门用 numpy 尝试过,它工作正常。它还包括 .so 文件,这很棒,因为一切都是独立的。


0
投票

感谢@alexpotato 提供了一个很好的起点。 我在部署管道中运行它,因此我需要首先运行 pipelinenv (否则站点包不存在)。 我还依赖于 Pipfile.lock (一种常见的部署管道实践)。 我动态确定路径,并从 zip 文件中排除一些内容。

#!/bin/bash

set -e

pipenv install --deploy --ignore-pipfile

SITE_PACKAGES=$(pipenv --venv)/lib/python$(python --version | sed 's/.*\(3\.[0-9]*\).*/\1/')/site-packages
echo "Library location: $SITE_PACKAGES"
DIR=$(pwd)

cd $SITE_PACKAGES
zip -r9 $DIR/lambda_function_payload.zip * -x "pip/*" "pip-*/*" "__pycache__/*"

cd $DIR
zip -r9 lambda_function_payload.zip .

echo "Package created at $DIR/lambda_function_payload.zip"
© www.soinside.com 2019 - 2024. All rights reserved.