【发布时间】:2021-03-15 06:58:09
【问题描述】:
随版本 20.3 一起发布的 new pip dependency resolver 安装包的时间过长。 昨天在我们的 CI 管道上,一个 docker 构建在 1 小时的 pip 安装消息后超时约 10 分钟(几乎对于任何依赖项安装的每个库都有类似的日志输出):
INFO: pip is looking at multiple versions of setuptools to determine which version is compatible with other requirements. This could take a while.
Downloading setuptools-50.0.0-py3-none-any.whl (783 kB)
Downloading setuptools-49.6.0-py3-none-any.whl (803 kB)
Downloading setuptools-49.5.0-py3-none-any.whl (803 kB)
Downloading setuptools-49.4.0-py3-none-any.whl (803 kB)
Downloading setuptools-49.3.2-py3-none-any.whl (790 kB)
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
Downloading setuptools-49.3.1-py3-none-any.whl (790 kB)
Downloading setuptools-49.3.0-py3-none-any.whl (790 kB)
Downloading setuptools-49.2.1-py3-none-any.whl (789 kB)
Downloading setuptools-49.2.0-py3-none-any.whl (789 kB)
Downloading setuptools-49.1.3-py3-none-any.whl (789 kB)
Downloading setuptools-49.1.2-py3-none-any.whl (789 kB)
Downloading setuptools-49.1.1-py3-none-any.whl (789 kB)
Downloading setuptools-49.1.0-py3-none-any.whl (789 kB)
Downloading setuptools-49.0.1-py3-none-any.whl (789 kB)
Downloading setuptools-49.0.0-py3-none-any.whl (789 kB)
Downloading setuptools-48.0.0-py3-none-any.whl (786 kB)
Downloading setuptools-47.3.2-py3-none-any.whl (582 kB)
Downloading setuptools-47.3.1-py3-none-any.whl (582 kB)
Downloading setuptools-47.3.0-py3-none-any.whl (583 kB)
Downloading setuptools-47.2.0-py3-none-any.whl (583 kB)
Downloading setuptools-47.1.1-py3-none-any.whl (583 kB)
Downloading setuptools-47.1.0-py3-none-any.whl (583 kB)
Downloading setuptools-47.0.0-py3-none-any.whl (583 kB)
Downloading setuptools-46.4.0-py3-none-any.whl (583 kB)
Downloading setuptools-46.3.1-py3-none-any.whl (582 kB)
Downloading setuptools-46.3.0-py3-none-any.whl (582 kB)
Downloading setuptools-46.2.0-py3-none-any.whl (582 kB)
Downloading setuptools-46.1.3-py3-none-any.whl (582 kB)
Downloading setuptools-46.1.2-py3-none-any.whl (582 kB)
Downloading setuptools-46.1.1-py3-none-any.whl (582 kB)
Downloading setuptools-46.1.0-py3-none-any.whl (582 kB)
Downloading setuptools-46.0.0-py3-none-any.whl (582 kB)
Downloading setuptools-45.3.0-py3-none-any.whl (585 kB)
Downloading setuptools-45.2.0-py3-none-any.whl (584 kB)
Downloading setuptools-45.1.0-py3-none-any.whl (583 kB)
Downloading setuptools-45.0.0-py2.py3-none-any.whl (583 kB)
Downloading setuptools-44.1.1-py2.py3-none-any.whl (583 kB)
Downloading setuptools-44.1.0-py2.py3-none-any.whl (583 kB)
Downloading setuptools-44.0.0-py2.py3-none-any.whl (583 kB)
Downloading setuptools-43.0.0-py2.py3-none-any.whl (583 kB)
Downloading setuptools-42.0.2-py2.py3-none-any.whl (583 kB)
Downloading setuptools-42.0.1-py2.py3-none-any.whl (582 kB)
Downloading setuptools-42.0.0-py2.py3-none-any.whl (582 kB)
Downloading setuptools-41.6.0-py2.py3-none-any.whl (582 kB)
Downloading setuptools-41.5.1-py2.py3-none-any.whl (581 kB)
Downloading setuptools-41.5.0-py2.py3-none-any.whl (581 kB)
Downloading setuptools-41.4.0-py2.py3-none-any.whl (580 kB)
Downloading setuptools-41.3.0-py2.py3-none-any.whl (580 kB)
Downloading setuptools-41.2.0-py2.py3-none-any.whl (576 kB)
Downloading setuptools-41.1.0-py2.py3-none-any.whl (576 kB)
Downloading setuptools-41.0.1-py2.py3-none-any.whl (575 kB)
Downloading setuptools-41.0.0-py2.py3-none-any.whl (575 kB)
Downloading setuptools-40.9.0-py2.py3-none-any.whl (575 kB)
Downloading setuptools-40.8.0-py2.py3-none-any.whl (575 kB)
Downloading setuptools-40.7.3-py2.py3-none-any.whl (574 kB)
Downloading setuptools-40.7.2-py2.py3-none-any.whl (574 kB)
Downloading setuptools-40.7.1-py2.py3-none-any.whl (574 kB)
Downloading setuptools-40.7.0-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.6.3-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.6.2-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.6.1-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.6.0-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.5.0-py2.py3-none-any.whl (569 kB)
Downloading setuptools-40.4.3-py2.py3-none-any.whl (569 kB)
Downloading setuptools-40.4.2-py2.py3-none-any.whl (569 kB)
Downloading setuptools-40.4.1-py2.py3-none-any.whl (569 kB)
Downloading setuptools-40.4.0-py2.py3-none-any.whl (568 kB)
Downloading setuptools-40.3.0-py2.py3-none-any.whl (568 kB)
我很困惑我们是否正确使用了新的 pip 解析器,尤其是因为
- Substantial improvements in new resolver for performance, output and error messages, avoiding infinite loops, and support for constraints files.
看到的行为在发行说明中描述为backtracking。我明白它为什么在那里。
它指定我可以使用一个约束文件(看起来像 requirements.txt)来修复依赖项的版本以减少运行时使用
pip install -c constraints.txt setup.py.
生成此约束文件的最佳方法是什么?目前,我能想到的最好方法是在新的虚拟环境中本地运行pip install setup.py,然后使用pip freeze > constraints.txt。但是,本地安装仍然需要很多时间(现在已经卡住了大约 10 分钟)。
笔记确实提到This means the “work” is done once during development process, and so will save users this work during deployment.
使用旧的依赖解析器,我可以在不到一分钟的时间内在本地安装这个包。
这里推荐的流程是什么?
编辑:我刚刚发现一些依赖项直接指向内部 gitlab 服务器。如果我直接从我们的内部包注册表安装,它会在几分钟内再次运行。
【问题讨论】:
-
我也有同样的问题。您的编辑看起来很有趣,您能否就如何检测到 gitlab 的依赖链接以及如何修复它添加一些指导?
-
在 setup.py 中,依赖类似于
my_lib @ git+ssh://git@gitlab.our-company.com/libraries/my_lib.git@v1.2.0,所以如果你没有手动放一些东西来指向你自己的 gitlab 服务器,你就不会遇到这个问题 -
谢谢。事实上,这不是我们的情况。
-
我可能会再次降级到 pip 19..
-
不幸的是 pip 19 产生了强盗安全警告:/ 所以,不再是一个选项 :( 很遗憾,因为 pip 19 工作得非常好。我真的不喜欢新的变化。至少应该有一个像这样的选项
--no-backtracking。当我要求安装包 A 时,没有指定版本,并且该包尚未安装,我希望 pip 安装最新版本的 A,或者死在尝试。我不希望它安装某个版本两年前的包裹。