在某人开始咆哮之前:
现在问题: 虽然Java一直是我的首选语言,但过去几周我已经看到我转向Jython以满足我的大部分需求。自问世以来,我的问题实际上分为两个,我很想得到明确的答案。
一个。可以在jython中按原样导入python模块吗? 我在不同的论坛上看过很多这样的问题,但从未见过明确的回答。我想知道Python和Jython是否存在一些可能不允许这样做的根本区别,以及是否可以在没有任何修改的情况下在Jython脚本中导入Python模块。
B中。如何在Java中使用Jython类?
一个简单的Web搜索显示,曾经有一个名为jythonc
的传奇实体可以将python代码编译为java字节码,但此后它已经灭绝了。从Java访问jython代码的唯一另一种方法是使用JSR 223来编写脚本,使用ScriptEngine
类,这引发了以下问题:是否仍然可以使用我在Jython中定义的Java类?
答案 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