【发布时间】:2019-09-14 19:20:32
【问题描述】:
我想知道如果存在特定版本的模块但不使该模块本身成为依赖项,我是否可以声明一个包将不起作用。
例如,作为包发布者,我发现 python 中 foo==1.2.3 的存在破坏了某些关键,即使我个人自己不使用它。
有没有办法声明不兼容,所以如果检测到这个模块,我的包将无法安装?
我知道我可以在运行时通过尝试导入它来动态测试它,但如果可以在包元数据中声明它,我更感兴趣,比如反依赖(或负依赖)
【问题讨论】:
-
不行,没有办法。
-
没有 declarative 方法可以做到这一点,但是如果您可以编写测试,您可以在 setup.py 中运行它并在以下情况下以非零状态退出它呈现
-
@Marat 根据您打包项目的方式,
setup.py可能不会在安装期间运行。如果在有问题的软件包之后安装了破坏软件包,它也将不起作用。还有@sorin,不,没有非运行时方法可以做到这一点。 -
虽然包的用户自己构建它们并不罕见,在这种情况下,他们可以选择使用轮格式而不是源代码。
-
目前我所知道的 安装时 没有干净的方法。可能值得阅读此文档 packaging.python.org/specifications/core-metadata/… 和此讨论 github.com/pypa/packaging-problems/issues/154 并最终权衡。诸如
Conflicts-Dist: foo==1.2.3之类的元数据字段可能很有用。
标签: python setuptools python-packaging