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

时间:2012-11-30 18:00:55

标签: python jython jsr223

在某人开始咆哮之前:

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

我会尝试回答一个问题。

广告。答:这取决于。如果module是Python代码,那么它可以用作普通模块。我用这种方式使用了一些模块,例如python-gnupg。如果模块使用一些像库这样的库来访问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