如何分发具有自包含本地依赖项的包?

时间:2021-03-11 01:41:16

标签: python pip

我在自己的机器上托管了一些本地包,我想在依赖它们的其他包的分发中包含它们的副本。安装本地包时,pip freeze 显示类似

public-package==3.0.1
local-package @ file:///home/user/local-package/dist/local-package-1.0.0.tar.gz

但是如果尝试在另一台计算机上安装该软件包,则会从 pip 收到错误消息,因为 local-package 路径不存在。我可以扩展 setup.py 命令来处理该 requirements.txt 文件,提取本地包路径,将本地包复制到 dist 存档的 deps 文件夹并重写 requirements.txt 之类的

吗?
public-package==3.0.1
local-package @ deps/local-package-1.0.0.tar.gz

并使 pip 将 deps/ 视为包存档本身的相对路径?

1 个答案:

答案 0 :(得分:0)

我设法通过源代码分发和覆盖 sdistegg_info 命令来做到这一点,以使 setuptools 将本地依赖项与包捆绑在一起,并在以后安装构建的包时在该包中创建 pip 搜索依赖项。但后来我发现它使系统容易受到 dependency confusion 攻击,因为从该包安装的本地包通过 pip freeze 可见,如果由于某种原因依赖位置,如 local-package @ file:///home/user/packages/local-package.tar.gz 被剥离为只是local-package pip 会在 pypi 上搜索它,这会导致依赖混淆。

此问题的最佳解决方案是供应所有本地依赖项,其中将其源代码复制到包中,pip 本身使用 vendoring 供应其依赖项。

相关问题