【问题标题】:How to update an older C extension for Python 2.x to Python 3.x如何将 Python 2.x 的旧 C 扩展更新到 Python 3.x
【发布时间】:2009-07-21 03:18:46
【问题描述】:

我想使用我找到的 Python 扩展 here,但我使用的是 Python 3.1,当我尝试编译包中包含的 C 扩展 (_wincon) 时,由于以下原因无法编译所有语法错误。不幸的是,它是为 Python 的 2.x 版本编写的,因此包括 PyMember_GetPyMember_Set 等方法,它们不再是 Python 的一部分。我的问题是我还没有开始学习 C,因此无法弄清楚如何修改代码以使用在 Python 3.1 中仍然有效的语法。 (还有几个宏,例如 staticforward 需要修复,但我假设只需要更改为 static。)因此:我该如何解决这个问题?

(请注意,我确实研究了 Python 的各种其他 Windows 控制台界面,例如 PyWin32 中的 win32con 扩展),但没有一个像这个看起来那样符合我的需求。)

【问题讨论】:

    标签: python c windows console


    【解决方案1】:

    我不相信有任何灵丹妙药可以将针对某些旧版本 Python 2 编码的 Python 扩展的 C 源代码转换为针对 Python 3 编码的有效 C 源代码——这需要理解 C以及 C API 发生了怎样的变化,以及扩展在其代码的每一部分中究竟做了什么。相信我,如果我们知道一些神奇的方法可以在没有人类知识和理解的情况下大体上做到这一点,我们会包含一个“代码生成器”(比如用于 Python 源的 2to3 ——即使它也有很大的局限性!)这样的C代码翻译。

    在实践中,尽管 Python 3.1本身是一种成熟且可用于生产的语言,但如果您需要一些代码,您不应该在 Python 3.1 中迁移您的代码(或编写一个全新的应用程序)你无法移植的 Python 2.* 扩展——坚持使用 2.6,直到你需要的扩展可用(或者你已经学会了足够的 C 来自己移植它们——或者用 Cython 重写它们,它确实支持 Python 2。 * 3.*,我相信,这只是程序员方面的一点小心)。

    【讨论】:

    • 我有种感觉。无论如何,谢谢你的建议。另外,我本来打算最终学习 C 的,所以我还是现在开始吧?
    • @Cat,当然,这似乎很合理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2012-07-01
    相关资源
    最近更新 更多