gpt4 book ai didi

python - 防止 pip 安装某些依赖项

转载 作者:行者123 更新时间:2023-12-03 14:02:51 32 4
gpt4 key购买 nike

我们正在为 Python 中的 Alexa 技能开发 AWS Lambda 函数,并使用 pip安装 ask-sdk打包到我们的dist/目录:

pip install -t dist/ ask-sdk

问题在于 -t dist/因为 pip想要在那里拥有所有依赖项,即使它们是在系统范围内安装的。

现在, ask-sdk依赖于 boto3它引入了许多其他软件包。然而,AWS Lambda 运行时环境提供了 boto3并且无需将其及其依赖项与我们的代码打包在一起。我有 boto3安装在系统和 import boto3有效,所以我想 pip应该高兴,但是因为 -t dist/它总是安装它。

我能以某种方式只安装 ask-sdk吗?以及系统中不存在的依赖项,例如 ask-sdk-core ,但不是那些已经安装的?

一种方法是列出所有模块并使用 pip --no-deps但这意味着要不断地手动跟踪依赖关系,我们希望避免这种情况。

我想以某种方式告诉 pip : 如果软件包已经安装,即使不在 -t dist/ 中不要在 dist/ 中复制.

那可能吗?

谢谢!

最佳答案

虽然不能告诉 pip “安装除 boto3 所需的所有依赖项之外的所有依赖项”,但可以生成所需的 requirements.txt通过计算 boto3 之间的差异和 ask-sdk来自 pip freeze输出(使用 Python 3.6.6 测试):

# get boto3 requirements
pip install boto3 -t py_lib.boto3
PYTHONPATH=py_lib.boto3 pip freeze > requirements-boto3.txt

# get ask-sdk requirements
pip install ask-sdk -t py_lib.ask-sdk
PYTHONPATH=py_lib.ask-sdk pip freeze > requirements-ask-sdk.txt

# compute their difference
grep -v -x -f requirements-boto3.txt requirements-ask-sdk.txt > requirements-final.txt

# patch to add one missing dep from boto3
# aws don't have this for some reason
grep urllib3 requirements-boto3.txt >> requirements-final.txt
requirements-final.txt包含以下内容:
ask-sdk==1.5.0
ask-sdk-core==1.5.0
ask-sdk-dynamodb-persistence-adapter==1.5.0
ask-sdk-model==1.6.2
ask-sdk-runtime==1.5.0
certifi==2018.11.29
chardet==3.0.4
idna==2.8
requests==2.21.0
urllib3==1.24.1

要将最后一组依赖项安装到文件夹:
pip install --no-deps -r requirements-final.txt -t py_lib

通过跳过 boto3依赖项,你可以从你的 python 依赖项中保存大约 45M 的数据。 ask-sdk依赖项只有大约 7.5M(压缩后 2.1M),如果需要,允许您使用内置的 lambda 代码编辑器。

关于python - 防止 pip 安装某些依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52126116/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com