5

在有人开始咆哮之前:

我已经在许多论坛上经历了几个类似的问题,但他们并没有有效地回答我的问题。

现在问题来了:尽管 Java 一直是我的首选语言,但过去几周我转向 Jython 来满足我的大部分需求。我的问题实际上从一开始就分成了两部分,我渴望得到一个明确的答案。

A. 可以在 jython 中按原样导入 python 模块吗?我在不同的论坛上读过很多这样的问题,但从未见过明确的答复。我想知道 Python 和 Jython 是否存在一些可能不允许这样做的根本差异,以及 Python 模块是否可以在不进行任何修改的情况下导入 Jython 脚本中。

B. 如何在 Java 中使用 Jython 类?一个简单的网络搜索显示,曾经有一个传说中的实体叫做jythonc可以将 python 代码编译为 java 字节码,但后来它已经灭绝了。从 Java 访问 jython 代码的唯一其他方法是使用 JSR 223 进行脚本编写,通过使用ScriptEngine该类,这引发了以下问题:是否仍然可以使用我在 Jython from Java 中定义的类?

  • 如果是,那我该怎么办?例如,如何在 Java 中扩展一个类(用 Jython 编写)?
  • 如果不是,那么是否有一些项目(工作或开发中)支持这种功能?
4

1 回答 1

2

我将尝试回答一个问题。

广告。答:这取决于。如果模块是 Python 代码,那么它可以用作普通模块。我用这种方式使用了一些模块,例如python-gnupg。如果模块使用诸如库之类的 C 库来访问 PostgreSQL 数据库,那么 Jython 就不能使用它们(它们甚至不可能从源代码安装在没有 C 编译器和 PostgreSQL 库和头文件的只有 Python 的环境中)。但是对于 PostgreSQL,我可以使用 JDBC 驱动程序,所以对我来说没问题。

所以你必须检查你想使用的模块是否是普通的 Python。虽然大多数模块都有setup.py. 您可以下载这样的模块,将其解压缩到某个目录中,然后jython setup.py install像这样使用:

C:\python_libs\fpconst-0.7.2>jython setup.py install
running install
running build
running build_py
running install_lib
copying build\lib\fpconst.py -> C:\jython2.5.3\Lib\site-packages
byte-compiling C:\jython2.5.3\Lib\site-packages\fpconst.py to fpconst$py.class
running install_egg_info
Writing C:\jython2.5.3\Lib\site-packages\fpconst-0.7.2-py2.5.egg-info

C:\python_libs\fpconst-0.7.2>jython
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:48:36)
[Java HotSpot(TM) Client VM (Oracle Corporation)] on java1.7.0_09
Type "help", "copyright", "credits" or "license" for more information.
>>> import fpconst
>>> fpconst
<module 'fpconst' from 'fpconst$py.class'>

对于不支持的模块,将显示一些错误:

C:\python_libs\pyodbc-2.0.58>jython setup.py install
running install
running build
running build_ext
building 'pyodbc' extension
error: Compiling extensions is not supported on Jython
于 2012-12-03T13:13:02.230 回答