我有一个依赖docker-py的软件包,并且我想将依赖项升级到docker。 不幸的是,这两个包不能很好地配合使用。
一种安全的处理方式是先卸载docker-py然后安装我的软件包,该软件包将在其位置安装docker(我已经将要求从docker-py更改为docker)。
在不破坏python环境的情况下(通过pip或任何其他方式)升级软件包时,在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(
...
)
然后安装程序将安装新的依赖项,一切正常。
这样安全吗? 还有更好的选择吗?
答案 0 :(得分:0)
pip
不是一个完整的软件包管理器,它没有诸如“此软件包与该软件包不兼容” 或“此软件包替代该软件包”之类的概念/ em>。您正在尝试模仿这些重要概念。不幸的是,这行不通。
pip
仅在用户主机上针对源分发(sdist)运行setup.py
。对于鸡蛋/转盘,pip
在开发者主机上运行setup.py
,无法配置要在用户主机上运行的预安装脚本,而如今的转盘是首选的分发格式。>
最好的办法是要求用户(通过文档)手动卸载docker-py
。