在开发Python包时,如果需要相同依赖项的不同版本,用户可能会遇到依赖项冲突。例如,如果你的包需要 requests==2.26.0,但用户的系统需要 requests==2.25.1,则两者不能共存,因为 Python 不允许同时安装同一包的多个版本。
避免依赖冲突的方法:
A. 供应商方法:
-
供应依赖项:这涉及将必要的依赖项直接包含在您的包中。它对于控制版本很有用,但可能会增加包大小。
-
纯 Python 包:供应对于没有自己的依赖项的纯 Python 包效果很好。
-
具有依赖关系的包:如果供应的包有自己的依赖关系,供应就会出现问题,从而导致潜在的冲突。
问题:
-
依赖项冲突:提供具有依赖项的包可能会导致用户环境发生冲突。
-
版本控制:保持供应商依赖项的更新对于安全至关重要。
-
尺寸:供应商可以增加包装尺寸。
示例:
-
场景 1:如果请求没有依赖项,将其与您的包捆绑在一起可确保使用正确的版本。
-
场景2:由于requests依赖于像urllib3这样的库,如果其他包需要不同版本的urllib3,包含它可能会导致冲突。
注意:如果您进行销售,则需要遵守销售政策。在这里查看。
B. 虚拟环境方法:
- 依赖冲突通常是无法控制的,尤其是在第三方应用程序中,即使使用虚拟环境也是如此。
问题:
-
超出我们的控制:用户如何设置虚拟环境超出我们的影响范围。
-
第三方应用程序:即使在虚拟环境中,它们仍可能面临冲突问题。
C. 分叉方法:
- 您可以分叉冲突的包,重命名它(例如,mypackage-requests==2.26.0),然后在包中使用分叉版本。
问题:
-
维护:分叉需要使用原始包更新分叉。
-
子依赖项:如果分叉的包具有依赖项,您可能还需要分叉并管理这些依赖项。
结论:
每种方法都有其优点和挑战,选择取决于您的具体用例以及您想要对依赖项进行多少控制。根据经验,最好通过正确维护包来解决冲突,确保与更广泛的 Python 生态系统的兼容性。
资源:
- 如何管理您的requirements.txt中冲突的包?
- 供应政策
- python-vendorize
- 您对供应的包裹有何看法?
以上是Python包冲突的详细内容。更多信息请关注PHP中文网其他相关文章!