【问题标题】:How to relocate/shade python packages?如何重新定位/遮蔽 python 包?
【发布时间】:2020-01-13 21:58:09
【问题描述】:

我正在寻找与以下具有相同“包重定位”功能的 python 包管理器:

  • maven-shade-plugin:

https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html

  • gradle-shadow-plugin:

https://imperceptiblethoughts.com/shadow/configuration/relocation/

这对于任何具有版本冲突的 Diamond 包依赖项都很重要。我在哪里可以找到支持它的包管理器?

更新:如果仍然缺失,那么实现一个需要多少努力?

【问题讨论】:

  • python 的内部模块解析不包括模块名称中的版本,因此为正在运行的解释器更改同一包的不同版本之间的引用是开箱即用的。如果你确实在运行时通过侵入sys.modules 来强制它,你只需将目标移至“是否可以将两个不同版本的包安装到同一个 python env 中?”,答案是更强烈的不.如果您必须依赖某个库的奇怪版本的包,通常的解决方案是在其中提供它。这对你来说是一个选择吗?

标签: python python-3.x dependency-management package-managers python-packaging


【解决方案1】:

根据this中接受的解决方案,不会发生钻石依赖。

考虑一下:A(您的项目)需要 B 和 C。B 和 C 都需要不同版本的 D。

通过 A 的 setup.py 正确列出所需的 B 和 C 版本,pip 将自动推断 D 的版本(或失败并出现错误)。

例如,您需要 B 的版本 4 和 C 的版本 3。B 的版本 4 需要 >= 4 的 D,而 C 的版本 3 需要 >=3 的 D。如果是这种情况,合适的版本 (4 ) 的 D 将被安装。

如果 B 的版本 4 需要 >= 4 的 D,而 C 的版本 3 需要

另外,the document here 列出了受 maven 阴影启发的内部流程。它可能对您有用(不幸的是,他们的方法是手动的,没有您要求的插件/工具)。

【讨论】:

  • 没有3.5版本。自己写一个试试?祝你好运升级其他动态类型的遗留传家宝代码。另外,如果安装失败并且无法修复,它已经发生了
  • 非常感谢链接,确实提供了一个有前途的方向,希望它可以随时通过包管理变得更加自主
猜你喜欢
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 2020-08-28
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多