Python-future: 新的魔法“configparser”导入打破了“configparser”反向移植

创建于 2014-10-16  ·  13评论  ·  资料来源: PythonCharmers/python-future

Python 3.x 中有一个 configparser 更改的反向移植,简称为“configparser”。 使用新引入的多语言导入,您的包可能会覆盖反向端口,例如,不能同时使用两者。

请考虑将 configparser backport 添加到 python-future 的要求列表中,这将解决此问题。

最有用的评论

随着时间的推移,越来越多的人直接使用 configparser backport,因为这是在 Python 2.x 上使用最新的上游 API(和特性)的方式。

因此,我并不真正了解您失败的测试的相关性。 如果您想要旧 API,请使用旧模块名称。 如果您想要新的 API,请使用新名称。 将 2.x ConfigParser 放在它的 Python 3 替代品所在的位置不再有意义。

如果我在 Kali https://bugs.kali.org/view.php?id=3245和一个典型的 Kali Linux 系统中得到了一个关于这个的报告,我有一个修复这个问题会很好,我有需要两个 python 的包-future 和 python-configparser。 除了由于这个错误,后者对于在 Python 2.x 上使用它的任何人来说都被破坏了。

所以总结一下,我认为你应该实现(1)并放弃关于configparser的测试。 (2) 不可行,因为 Debian 软件包是在最小环境中构建的,并且在 setup.py 运行时 python-configparser 将不可用。 (3) 是可能的,但这意味着 python-future 的 API 会根据它的安装方式而有所不同。 这真的不是一个好主意,因为发行版只能以一种方式安装。

谢谢! 抄送@sbrun

所有13条评论

此外,在 backport repo 上,人们已经报告这不起作用: https ://bitbucket.org/ambv/configparser/issue/8/configparser-import-broken-on-py27

暂时我必须在 configparser 中删除对 python-future 的依赖才能使其工作。

+1

更一般地说,python-future 不应安装影响其他已安装模块 IMO 的模块。 大多数其他问题不太可能成为问题,因此最好只这样做而不是添加虚假依赖项。

@ambv@Julian :感谢您的反馈。 我想解决这个问题,但我还没有看到正确的方法。 以下是我看到的选项:

  1. 从 python-future 中删除configparser并更改文档以推荐使用您的configparser包。 这可能是有道理的,但除非configparser是 Py2.7 上ConfigParser的替代品。 目前,在将import ConfigParser替换为import configparser as ConfigParser后,在安装了configparser包的 Python 2.7.9 上运行test_cfgparser.py时出现 14 次失败和 9 次错误。 安装了 python-future 及其简单的configparser别名后,所有相同的测试都通过了。
  2. 仅当不存在同名的模块或包时,才在 python-future 中更改setup.py以安装configparser别名包。 这样做的缺点是安装的包将取决于它们在requirements.txt中列出的顺序。 更糟糕的是,我相信pip并不能保证按照它们出现在requirements.txt中的顺序安装软件包。 如果configparserfuture都被列出,这将导致pip安装的软件包集是不确定的。
  3. 使用 setuptools 的extras功能来支持安装选项,例如pip install future[without_configparser]

你认为configparser包可以修改,以便 Python 2.7.9 测试套件在使用时通过吗? 这将使我有信心推荐它为当前使用ConfigParser的 Py2 代码提供平滑升级路径。

随着时间的推移,越来越多的人直接使用 configparser backport,因为这是在 Python 2.x 上使用最新的上游 API(和特性)的方式。

因此,我并不真正了解您失败的测试的相关性。 如果您想要旧 API,请使用旧模块名称。 如果您想要新的 API,请使用新名称。 将 2.x ConfigParser 放在它的 Python 3 替代品所在的位置不再有意义。

如果我在 Kali https://bugs.kali.org/view.php?id=3245和一个典型的 Kali Linux 系统中得到了一个关于这个的报告,我有一个修复这个问题会很好,我有需要两个 python 的包-future 和 python-configparser。 除了由于这个错误,后者对于在 Python 2.x 上使用它的任何人来说都被破坏了。

所以总结一下,我认为你应该实现(1)并放弃关于configparser的测试。 (2) 不可行,因为 Debian 软件包是在最小环境中构建的,并且在 setup.py 运行时 python-configparser 将不可用。 (3) 是可能的,但这意味着 python-future 的 API 会根据它的安装方式而有所不同。 这真的不是一个好主意,因为发行版只能以一种方式安装。

谢谢! 抄送@sbrun

例如,目前,Fedora 只是简单地修补了 configparser ,因为他们也有可用的反向端口。

FWIW,我目前正在处理需要合并到后端端口的上游修复程序,并将在明天发布 configparser 后端端口 3.5.1。 至于python-future,我也觉得应该实现(1)。

谢谢大家的意见!

我愿意在 v0.16 中从 python-future 中删除configparser 。 我有一个正在进行的分支: https://github.com/PythonCharmers/python-future/tree/v0.16.x。

我来到这里试图弄清楚为什么ConfigParser.read_dict停止在我的机器上工作。

原来我使用的一个包是根据python-future (特别是 QGIS 的某些部分)启动的,然后我遇到了这个问题,因为 Python 2.7 中的 ConfigParser 版本没有实现 ConfigParser 的完整 API在 Python 3.x 中。

我通过锁定软件包的python-future版本解决了这个问题:

sudo chmod 000 /usr/lib/python2.7/dist-packages/configparser/

Flake8 最近添加了对@ambv慷慨维护的 configparser backport 的依赖。 一些用户还安装了这个模块,它破坏了 Flake8 的现有、测试和记录的行为。 这对我们来说是个问题,我现在要开始向 Flake8 添加文档来解释为什么人们可能会看到问题。 Future 将被特别提及以帮助用户避免这种麻烦。

@sigmavirus24 Ian,您现在可以通过configparser反向移植并使用from backports import configparser表单来解决此问题。 这是专门为解除阻塞这样的情况而实施的:(

@ambv谢谢! 我没有意识到我能做到这一点。

我现在发布了 v0.16.0,它删除configparser 。 文档还推荐使用 Lukasz 的 backport。 谢谢大家的反馈!

谢谢@edschofield!

此页面是否有帮助?
0 / 5 - 0 等级