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

时间:2014-07-02 11:10:59

标签: python django python-3.x django-south

我刚刚安装了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'

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

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

我惊讶于我无法找到遇到同样问题的人。

1 个答案:

答案 0 :(得分:23)

更新:South 1.0.1于2014年10月27日发布,includes the fix for this issue

  

南1.0.1

     

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

     
      
  • Python 3的兼容性已得到修复(在1.0中被意外引入iteritems()打破了)
  •   
  • 如果它检测到Django 1.7或更高版本,而不是使用神秘错误而失败,则会明确错误。
  •   

我的原始答案如下所示


看来Django-South并不真正支持Python 3,至少该项目在发布之前不会验证支持。见this issue in the South tracker

  
    

Python3支持是否有任何进展?目前的状况是什么?

         

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

  
     
     

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

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

0.8.4 兼容,但this commit再次破坏了兼容性;您的更改应该足以解决该问题。有一个pull request可以解决这个问题,但尚未合并。

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

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