如何让Python代码一次编写,到处运行?

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

我正在学习Python,想做以下几件事:

  1. 用Python/Django写一个网页应用
  2. 创建一个安卓应用(使用Jython)
  3. 为Unix系统写一些Python脚本

我之前以为,因为Python可以在Java(Jython)和.NET(IronPython)上运行,所以我只需要写好我的Python代码,然后用这两种工具中的任意一个来运行就行了。

我以为如果我在CPython上写一个“你好,世界”的程序,然后用Jython编译,它就会变成Java字节码;如果用IronPython编译,它就会变成.NET字节码。

但现在看来,普通的Python代码在Jython编译器/解释器上是不能直接用的。你需要导入一些特定于Java的模块。这就意味着,我得用Java的模块和库重新写我的程序。

有没有什么建议,可以让我写的Python代码在不同的平台上都能用?比如网页、Unix和安卓。

注意:我不想学Java。

谢谢!

2 个回答

-1

请你具体说明一下你想要做什么。你的普通Python代码是什么?它哪里没有按照你的预期工作?

根据Jython常见问题解答,Jython是Python语言的一种实现。相同的Python代码在Jython和CPython上应该会产生相同的结果。

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团队会拒绝,但我不会抱太大希望。无论哪种选择,都是非常耗费精力的工作。

撰写回答