为什么Django South 1.0使用iteritems()?

JBC*_*JBC 19 python django django-south python-3.x

我刚刚安装了South 1.0,当我即将进行第一次迁移时,我收到了以下错误消息:

... /lib/python3.4/site-packages/south/migration/migrators.py", line 186, in _run_migration
for name, db in south.db.dbs.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
Run Code Online (Sandbox Code Playgroud)

我通过用items()替换两次出现的iteritems()来修复它.
我的问题是:

  • 如果South 1.0与Python3兼容,为什么会发生这种情况?
  • 我的修复会不会给我带来麻烦?

令我惊讶的是,我找不到任何遇到同样问题的人.

Mar*_*ers 23

更新:South 1.0.1于2014年10月27日发布,其中包括此问题的修复:

南1.0.1

这是South的一个小错误修正版本,有两处变化:

  • Python 3的兼容性已得到修复(由于意外引入而在1.0中被破坏iteritems())
  • 如果它检测到Django 1.7或更高版本而不是使用神秘错误而失败,那么South将明确地出错.

我的原始答案如下.


看起来Django-South并不真正支持Python 3,至少该项目在发布之前不会验证支持.在南方跟踪器中查看此问题:

Python3支持是否有任何进展?现状是什么?

我在0.8.3版本之前看到了一个与python3相关的提交,想知道它是否完整.


它应该有点工作,但如果你想要持续的Python 3支持,那么你最好使用django 1.7的迁移,这是South的继任者,并拥有一个完整的python 3测试套件.

显然'sorta'是'不是真的'; 维护者已将注意力转移到Django 1.7的新迁移基础架构上.

0.8.4 兼容的,但这个承诺再次爆发的兼容性; 您的更改应该足以解决该问题.有一个拉取请求只解决了这个问题,但尚未合并.

由于1.0仅在昨天发布,因此您没有找到其他人遇到此问题的原因是因为没有多少人遇到过这个问题.

Django 1.7的迁移支持基本上是将South整合到主线中,并且它完全支持Python 3(自动化测试是针对完整的Django树运行的,如同这些回归一样).第一个候选版本已经发布(有关如何安装它的说明,请参阅https://www.djangoproject.com/download/).

  • 这令人沮丧.我期待南方开发者能够在他们的比赛中占据优势.使用`python3.2`运行unittests有多难?在任何情况下,如果它不支持Python3,他们不应该宣传它支持Python3 ... (5认同)