Backward compatibility of Python 3.5 for external modules

时间:2015-11-12 10:53:43

标签: python python-3.x python-module cpython

I have built a Python C++ module based on Python 3.4.3. Later I have installed Python 3.5, and tried to load my Python module. When I tried to do so, I got the following error:

ImportError: Module use of python34.dll conflicts with this version of Python.

I try to import my module by running Python from the command prompt.

So I wonder: Is there no backward compatibility in Python 3.5 for modules that were built with previous versions? Must I build my module again with Python 3.5?

2 个答案:

答案 0 :(得分:3)

默认情况下,Python只尝试跨版本提供源兼容性,而不是二进制兼容性;通常需要重新编译(并且由于显式链接Python核心DLL的次要版本特定版本,因此在Windows上始终需要重新编译。)

从3.2开始,扩展可以选择加入有限版本的API,保证在Python版本中保持ABI兼容,因此通过定义Py_LIMITED_API不需要重新编译。您可以在more details about using the stable ABI on the Python docsPEP 384上阅读,它们首先定义了稳定ABI的概念。

答案 1 :(得分:2)

C(或C ++)扩展模块与它们编译的解释器的Python DLL相链接,因此它不仅仅是必须匹配的版本号,而且还包括它为其编译的体系结构(操作系统)和32对64位)。尝试使用具有不同运行时DLL的另一个解释器导入此类扩展模块会导致您获得异常。

根据扩展名,您可能会尝试将其编译为带有C API的DLL,并使用tweets.text[0]模块来连接DLL。只要连接DLL的Python模块可以跨目标Python版本移植,共享库是可移植的,仅受32位和64位选择的限制。