Supporting Python 3——迁移python2的c扩展到python3
迁移C扩展 Python 3有很多在C语言API上的变化,包括在API中定义类和初妈化的模块。这意味着每一个C扩展为了能在Python 3 下运行需要进行修改。一些变化很简单而另一些不简单,但是因为2to3只处理Python代码,你不得不对这些变化进化手动处理。这也意味着不你能通过2to3的转换来同时实现Python 2和Python 3的支持。幸运的是,C预处理程序可以很容易地实现使用相同的代码支持Python 2和Python 3.这是一个使在C中支持不同版本API的标准方式,这也将成为C程序员的标准技能。因此没有丑陋的黑客参与,只是少了些漂亮的 #if 和# ifndef 语句。 在你开始前 有一些事情你可以在真正开始移植前先做。首先是移除一些你根本不需要的老别名的用法。例如RO宏已经被删除了。它只是一个简写的READONLY,因些如果你在代码中用了RO,你可以使用READONLY来替代它。其他常见的重定义是 statichere 和 staticforward。 他们是为了兼容特定编译器的变通方法。对于表现良好的编译器他们只是 static 的重定义,因此在CPython支持的所有平台都有表现良好的编译器的当今Python 3已经不需要他们了。如果你在代码中使用了他们,你可以用 static 来代替。 其他在移植你可以做的变化是摆脱 PyClassObject