【问题标题】:Importing Python modules in Jython WITHOUT MODIFICATION在不修改的情况下在 Jython 中导入 Python 模块
【发布时间】:2012-11-30 18:00:54
【问题描述】:

在有人开始咆哮之前:

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

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

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

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

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

【问题讨论】:

    标签: python jython jsr223


    【解决方案1】:

    我会尝试回答一个问题。

    广告。答:这取决于。如果模块是 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
    

    【讨论】:

    猜你喜欢
    • 2011-03-16
    • 2013-08-22
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2014-11-14
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多