我有一个使用OpenCV的Python程序。目前该程序如预期运行。现在我想使用Cython将我的Python代码编译为C代码。我这样做是因为我不想完全用C重新编写整个程序,而是希望其他Python程序仍然可以 import my_program
。
我以前从未使用过Cython,但刚刚阅读了一些博客文章。请问有人能告诉我应该做好哪些准备工作,这将是多么艰巨的任务...... 我现有的Python程序大约有200行代码。
我有一个使用OpenCV的Python程序。目前该程序如预期运行。现在我想使用Cython将我的Python代码编译为C代码。我这样做是因为我不想完全用C重新编写整个程序,而是希望其他Python程序仍然可以 import my_program
。
我以前从未使用过Cython,但刚刚阅读了一些博客文章。请问有人能告诉我应该做好哪些准备工作,这将是多么艰巨的任务...... 我现有的Python程序大约有200行代码。
你可能需要为每个平台,32位和64位,每个(主要的,例如3.4、3.5)使用的Python版本重新编译你的模块,并且在Windows上可能需要使用多个不同的编译器。
你不能在模块级别使用__file__
。当尝试查找与代码存储在相同位置的静态资源的路径时,这有时会成为问题。
一些尝试通过检查堆栈(查看调用它们的函数中定义的变量)来做聪明事情的东西会出现问题,例如sympy中的一些和可能一些快捷方式到字符串格式化(请参见一些可能使用这个想法的示例)。
任何查看函数的字节码的东西(因为它不是由Cython生成的)。Numba可能是数值Python中最常用的例子,但我知道至少有一个(未维护的)MATLAB/Python包装器会检查调用函数的字节码以尝试确定返回的参数数量。
你必须有一个__init__.py
文件才能将一个文件夹变成一个模块——它不会单独识别已编译的__init__.so
文件。
字符串连接可以通过Python中的快速路径进行,而Cython不管理。你在代码中不应该过多地依赖这一点,但是如果你依赖它,你可能会看到很大的性能差异。