在开发Pylint期间,我们遇到了interesting problem related to non-dependency that may break pylint
package。
案例如下:
python-future
与configparser
包的别名冲突。 Quoting official docs:
此版本删除了configparser软件包,作为Py2上ConfigParser的别名,以提高与Lukasz Langa的backported configparser软件包的兼容性。以前python-future和configparser backport冲突,导致各种兼容性问题。 (问题#118,#181)
python-future
本身不是 Pylint的依赖如果存在python-future,强制执行的标准方法是什么,强制它为0.16或更高版本限制?我想避免将依赖关系定义为future>=0.16
- 通过这样做,我强制用户安装他们不需要的包,并且在一般情况下不会使用。
答案 0 :(得分:2)
kw = {}
try:
import future
except ImportError:
pass
else:
kw['install_requires'] = ['future>=0.16']
setup(
…
**kw
)
答案 1 :(得分:0)
此问题的一种解决方法是仅为all
目标定义此要求,因此,只有当某人添加pylint[all]>=1.2.3
作为要求时,才会安装/升级期货。
此刻我不知道另一种方式来忽略或升级"依赖。
另外,我会避免将Python代码添加到setup.py
以使其成为" smart",...是众所周知的分布式反模式;)
答案 2 :(得分:0)
没有支持的方法来告诉pip或setuptools只有在安装时包需要满足约束。可能会有一些黑客,但我想他们都会很脆弱,可能会破坏pip / setuptools的未来版本。
老实说,唯一的良好的方式是在文档中的适当位置为future < 16.0
打破pylint的用户记录它。
让你的setup.py
脚本包含条件依赖项已经被强烈劝阻了一段时间了。一旦构建了一个轮子,就会安装包与轮子保持相同的依赖信息 - setup.py不在最终用户的系统上运行,只在打包器的系统上运行,这意味着任何setup.py hack(如@phd的)没有用(因为pylint分配轮子)。