在Jython上开发Django有没有问题?
背景
我和朋友正在业余时间一起开发一个中等规模的网页应用,我们决定使用Python的Django框架。Django提供了很多我们需要的功能,所以请不要建议其他框架。
我现在唯一犹豫的决定是,我们是用Python还是Jython来开发这个应用。我对Java比较熟悉,可能会从JDK中的库中受益。我对Python了解不多,但这次项目是我学习新语言的机会,所以大部分工作会用Python来写。
Jython的吸引力当然在于它可以在JVM上运行。支持Python/Django的网络主机非常少,而我想我可以把Jython/Django应用放在各种各样的主机上。这不是一个重大的设计决策,但我觉得还是需要决定一下。就JVM的可访问性而言,我更倾向于使用Jython而不是Python。
问题
与普通的Python相比,Jython有很多限制吗?在Jython上运行Django会出现问题吗?Jython团队更新的速度跟Python相比怎么样?Django在Jython上能像宣传的那样工作吗(几乎不需要预先配置)?
决定
感谢大家的有用评论。我想我会选择在Jython上开发,以支持JVM,但尽量只使用Python的代码和库。可移植性不是主要问题,所以如果我需要JDK中的某个库(在Python中没有),我会使用它。只要Django得到完全支持,我就满意。
4 个回答
我最近开始在业余时间做一个开源桌面项目。所以这可能不适用。我也遇到了同样的问题。我决定尽量用Python(和Django)来写代码,并且让它能在所有平台上运行,包括CPython、Jython和IronPython。
接着,我决定写一些插件,这些插件可以和不同实现上的库进行交互(比如,不同的图形界面库)。
为什么要这样做呢?我一开始就觉得,我的代码能否长久使用,可能不仅仅依赖于CPython,还要考虑虚拟机的支持。现在来说,CPython是最快的选择,但谁知道未来会怎样呢?如果你的代码足够灵活,你就不必只针对一个平台。
不过,这种做法的缺点是,你需要写更多的代码,并且还要维护这些代码。
我觉得如果你喜欢Django,那你也会喜欢Python。不要在学习新语言的时候,把以前学过的语言的经验混在一起,这种错误很常见。只有在掌握了Python之后,你才能判断混合语言是否比这两种语言更好。
确实,很少有便宜的主机提供预装Django的服务;不过,这种情况很可能会改变,因为Django的环境和谷歌的应用引擎非常相似。(而且大多数GAE项目都可以在Django上运行)
Django确实可以在Jython上运行,不过你需要使用Jython的开发版本,因为Jython 2.5技术上还处于测试阶段。不过,从Django 1.0开始,应该可以直接使用,不需要修改。
至于你应该选择普通的Python版本还是Jython,这主要看你更喜欢使用Java库还是Python库。目前,你可以期待几乎所有的Python标准库都能在Jython上正常工作,但还有很多第三方包是无法使用的,尤其是那些需要C扩展的模块。我个人建议使用普通的Python,但如果你对JVM非常熟悉,想继续使用你熟悉的东西,那我也能理解。
关于寻找Python的托管服务,这个页面可能会对你有帮助。