如何让Python代码编写一次,在任何地方运行?

时间:2011-12-12 09:31:47

标签: python ironpython jython

我正在学习Python。我的意图是:

  1. 用Python / Django编写webapp
  2. 创建一个Android应用程序(使用Jython)
  3. 为unix box编写一些python脚本
  4. 由于Python已经在Java(Jython)和.NET(IronPython)中实现,因此我感觉不到(错误),我可以简单地编写我的Python代码并通过解释器/编译器运行它。

    我想如果我在CPython中编写了一个hello world并用Jython编译它,我会得到Java字节码。如果我用IronPython编译它,我会得到.NET字节码。

    但现在看来普通的Python代码无法与Jython编译器/解释器一起使用。您将导入一些奇特的Java特定模块。所以,这意味着,我将不得不使用Java模块/库重新编写我的Java程序。

    有关如何编写我的Python代码以便它可以在任何地方工作的任何提示吗? Web,Unix,Android。

    注意:我不想学习Java。

    由于

2 个答案:

答案 0 :(得分:2)

print 'Hello, World!'

这适用于任何名副其实的Python实现。大多数其他纯Python代码也是如此。在使用库时,它变得棘手,因为Jython和IronPython缺少一些标准库模块,并且不支持C扩展。处理特定于平台的代码也会带来一些问题。

如果您希望代码可移植,则需要从共享代码中删除尽可能多的依赖项。标准库通常没问题(但两者都不完整),如果纯Python外部模块只依赖于其他纯Python模块,那么它们通常都可以。

如果您确实需要检测它们,我相信规范检查是:

if os.name == 'java': # Jython
if sys.platform == 'cli': # IronPython

Jython和IronPython都不会生成在没有Jython / IronPython存在的情况下运行的程序。原则上它是可能的,甚至可以将Python的子集编译为纯字节码;前者需要在Python引擎中进行链接,后者需要限制你可以使用的Python部分。

如果有人为IronPython提供这个,我不会拒绝,我怀疑Jython团队也会这样,但我不会屏住呼吸。这两个选项都是很多的工作。

答案 1 :(得分:0)

请更具体地说明您要做的事情。你的常规Python代码是什么?什么不符合您的预期?

根据Jython FAQ,Jython是Python语言的一种实现。相同的Python代码应该在Jython或CPython上产生相同的结果。