0

我有一个依赖于 docker-py 的包,我想将依赖项升级到 docker。不幸的是,这两个软件包不能很好地相互配合。

一个安全的方法是首先卸载 docker-py,然后安装我的包,它将安装 docker(我已经将要求从 docker-py 更改为 docker)。

当我升级我的包(通过 pip 或任何其他方式)而不弄乱 python 环境时,有没有办法在 setup.py 中发生这种情况?

我想到的第一件事是在 setup.py 中检查 docker-py 是否已经安装并pip uninstall像这样运行:

   from setuptools import setup

   ...

   if 'docker-py' in [x.project_name for x in pip.get_installed_distributions()]:
       submodule.check_call("pip uninstall -y docker-py".split())

   setup(
      ...
   )

然后安装程序将安装新的依赖项,一切都会正常工作。

这安全吗?有更好的选择吗?

4

1 回答 1

0

pip不是一个成熟的包管理器,它没有“这个包与那个不兼容”“这个包替换那个”这样的概念。你要做的是模仿这些重要的概念。不幸的是,这不起作用。

pipsetup.py仅在源分发 (sdist) 的用户主机上运行。pip对于在开发者主机上运行的egg/wheels setup.py,无法配置在用户主机上运行的预安装脚本,而如今,wheels 是首选的分发格式。

最好的办法是要求用户(通过文档)docker-py手动卸载。

于 2018-06-25T12:43:47.873 回答