在Jython中导入Python模块,无需修改

div*_*210 5 python jython jsr223

在有人开始咆哮之前:

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

现在提出一个问题:虽然Java一直是我的首选语言,但过去几周我已经看到我转向Jython以满足我的大部分需求.自问世以来,我的问题实际上分为两个,我很想得到一个明确的答案.

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

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

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

Mic*_*las 2

我将尝试回答A问题。

广告。答:这要看情况。如果模块是Python代码,那么它可以用作普通模块。我已经用这种方式使用了一些模块,例如python-gnupg。如果模块使用一些 C 库(例如访问 PostgreSQL 数据库的库),那么 Jython 就无法使用它们(甚至无法在仅使用 Python 且没有 C 编译器和 PostgreSQL 库和头文件的环境中从源代码安装它们)。但对于 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'>
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)