我有一个使用OpenCV的python程序。该程序按预期运行。现在我想用Cython将我的python代码编译成C代码。我这样做而不是用C重写整个程序,因为我仍然希望其他python程序能够import my_program
。
我之前从未使用过Cython,但刚刚阅读了一些关于它的博客文章。有人可以告诉我我应该准备什么以及它将会有多大的艰巨任务....我目前的python程序是~200 LoC。
答案 0 :(得分:1)
根据您的评论,您希望“按原样”运行现有代码以避免提供源代码,而不是对使用Cython特定功能进行任何重大更改。考虑到这一点,我希望它能够在没有任何重大努力的情况下正常工作。一个简单的替代方法是提供pyc字节码文件。
我知道的重要问题清单(粗略的重要性顺序)如下。列出了其他几个in the documentation。其中大多数都很小,所以你不幸遇到它们。
您可能需要为每个平台重新编译模块,32位和64位,每个(主要的,例如3.4,3.5)版本的Python,并且可能在具有多个不同编译器的Windows上。
您无法在模块级别使用__file__
。在尝试查找与代码存储在同一位置的静态资源的路径时,这有时会成为一个问题。
通过检查堆栈(查看调用它们的函数中定义了哪些变量)来尝试做一些聪明的事情,例如some of sympy以及可能的一些字符串格式快捷方式( see for example可能会使用这个想法的一些食谱)
查看函数字节码的任何内容(因为它不是由Cython生成的)。 Numba可能是数值python中最常用的例子,但我知道至少有一个(unmaintained)MATLAB/Python wrapper检查调用函数的字节码,试图计算出返回的参数数量。
String concatenation can go through a fast path in Python that Cython doesn't manage。不管怎样,你不应该在你的代码中做太多这样的事情,但如果你依赖它,你可能会看到很大的性能差异。