用Pyrex编译Django项目

2 投票
1 回答
4686 浏览
提问于 2025-04-17 08:22

我在想,有没有人能用pyrex(或者类似的工具)把基于Django的项目编译成共享库,比如说共享对象库,同时还能保持用普通Django项目和Python的灵活性。

我们需要这个项目能在apache上运行,所以不能把它编译成一个独立的二进制文件。我想的方式是把它编译成库,这些库可以被解释器使用,这样它的表现就应该和现在用Python的项目一样。最好是不要写太多C语言的代码 :)

提前谢谢大家。

1 个回答

7

Pyrex和它的继任者Cython并不是完全兼容Python的,它们其实是另一种语言,虽然是基于Python的。

Django是一个非常复杂的项目,运行它需要严格遵循Python的规范。我怀疑如果不花几个月的时间去让Django直接在Cython或Pyrex上运行,是不可能实现的。不过,可以使用一个叫做分析器的工具,把一些性能瓶颈的部分转换成本地代码,这样做的工作量会小很多(通过用Cython优化的模块替换Django核心中的某些模块)。

而且,使用Pyrex或Cython进行优化并不是“免费”的——如果运行一些简单的、计算密集型的代码,使用Cython可以大约提高30%的速度,而不需要改动代码。但如果想要更大的速度提升,就需要手动调整代码,把一些变量设置为静态类型。

另一方面,你可以尝试用Pypy来运行Django——这里有一些提示:http://reinout.vanrees.org/weblog/2011/06/06/django-and-pypy.html

Pypy是一个非常符合Python标准的解释器,Django的核心是可以在它上面运行的。它采用了一种即时编译的方法,使得在大多数工作负载下,它的速度比Python的标准实现(CPython)快好几倍。

撰写回答