我有一个Python项目,我正在使用pipenv来处理deps。
我需要创建一个 zip 文件,其中包含源代码和所有依赖项代码。我需要这个 zip 文件来将其上传到 AWS Lambda。
使用 Pipenv 时,它会下载计算机中某处的依赖库,但为了打包/分发项目,我需要将所有必要的代码包含在同一位置(一个 zip 文件)。
有没有办法运行pipenv并将其设置为在特定路径安装依赖项?如果没有,有人知道这些依赖项位于我的计算机中的位置吗?
谢谢
这对我有用:
#!/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 文件,这很棒,因为一切都是独立的。
感谢@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"