首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止pip安装某些依赖项

防止pip安装某些依赖项
EN

Stack Overflow用户
提问于 2018-09-01 07:55:54
回答 3查看 19.4K关注 0票数 13

我们正在开发一个Alexa函数,用于Python中的Alexa技能,并使用pipask-sdk包安装到我们的dist/目录中:

代码语言:javascript
复制
pip install -t dist/ ask-sdk

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

现在,ask-sdk有一个依赖于boto3的特性,这会吸引很多其他的包。但是,AWS运行时环境提供了boto3,不需要将其及其依赖项打包到代码中。我确实在系统中安装了boto3import boto3可以工作,所以我认为pip应该很高兴,但是因为-t dist/,它总是安装它。

我是否可以以某种方式安装系统中不存在的ask-sdk及其依赖项,例如ask-sdk-core,但不安装已经安装的依赖项?

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

不知何故,我想告诉pip:如果包已经安装,即使不是在-t dist/中,也不要在dist/中放置一个副本。

这有可能吗?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2019-01-28 23:19:33

虽然您不能告诉pip“安装除boto3所需的依赖项之外的所有依赖项”,但您可以通过从pip freeze输出中计算boto3ask-sdk之间的差异(用Python3.6.6测试)来生成所需的ask-sdk

代码语言:javascript
复制
# 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包含以下内容:

代码语言:javascript
复制
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

若要将最后一组依赖项安装到文件夹:

代码语言:javascript
复制
pip install --no-deps -r requirements-final.txt -t py_lib

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

票数 11
EN

Stack Overflow用户

发布于 2018-09-01 08:08:58

你可以试试这个选项

代码语言:javascript
复制
  --no-dependencies

忽略所有依赖项。

要排除特定的内容,可以将其放入需求文件并传递给它:

代码语言:javascript
复制
pip install --no-deps -r requirements.txt
票数 4
EN

Stack Overflow用户

发布于 2018-09-01 08:30:04

这会起作用的

$ pip install -t dist --no-deps ask-sdk

在上面的命令之后,我用树签出了dist目录内容,它只安装了ask-sdk,没有依赖项。

代码语言:javascript
复制
dist/
├── ask_sdk
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── __version__.py
│   ├── __version__.pyc
│   ├── standard.py
│   └── standard.pyc
└── ask_sdk-0.1.3.dist-info
    ├── INSTALLER
    ├── METADATA
    ├── RECORD
    ├── WHEEL
    └── top_level.txt
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52126116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档