标签: jython

fast-ish python/jython IPC?

我想做的就是通过套接字进行一些RPC调用.我有一台运行jython 2.5的后端程序服务器.我需要从CPython上运行Django的前端服务器进行一些调用.我一直在靠墙打败任何形式的IPC.

我试过的事情清单:

  • Apache Thrift没有任何实际版本,只有快照.我想用稳定的东西.
  • JSON-RPC很有趣,它应该能够在套接字上运行,但实际上大多数实现似乎只能在HTTP上运行.HTTP开销正是我想要避免的.
  • 协议缓冲区实际上只是一个序列化协议.从我收集的protobuf提供RPC的接口生成,但它只是接口.实际上,编写所有连接代码取决于用户.如果我要使用套接字卡住,我只会使用JSON进行序列化.它更简单,更快捷.
  • Pyro无法与Jython作为服务器正常工作.某种套接字超时问题.我已经向邮件列表发送了一条消息.
  • pysage Yay传递消息!只需要python 2.6或处理模块(具有已编译的扩展).Jython是2.5版本,不允许编译扩展.
  • Candygram是一种有趣的替代pysage,但据我所知,它没有维护.我还没有尝试过Jython.有任何经验吗?
  • Twisted Perspective Broker Twisted对Jython不起作用.

我知道用XML-RPC做这件事很容易,这让我更加胡思乱想.我想避免HTTP的开销,但同时我真的不想让套接字变脏并实现我自己的协议.如果我这样做,我会做错的.

有任何想法吗?我可能会哭大约20分钟,然后只使用XML-RPC.

python rpc ipc jython twisted

14
推荐指数
2
解决办法
3549
查看次数

Jythonc失踪了

我刚刚安装了Jython 2.5.1.我想将我的Python文件转换为Java类文件,并在网站上指示使用jythonc命令行工具,但我找不到它.有谁知道我能在哪里找到它?

基本上我想要完成的是让我的Python代码在浏览器中运行客户端,最好的方法似乎是使用Jython创建一个applet.我不想创建桌面应用程序,并且使用Silverlight/IronPython是不可能的.欢迎任何其他想法.

干杯!

python jython

14
推荐指数
2
解决办法
3548
查看次数

在Jython中使用NumPy和Cpython

必须使用商业Java库,并希望从Python中完成.Jython很强大,我很好,因为它背后有一些点发布.但是,我也想使用NumPy,这显然不适用于Jython.CPype和Java数字库之类的选项没有吸引力.前者基本上死了.后者大多不成熟,缺乏易用性和广泛接受NumPy.我的问题是:如何让Jython和Python代码互操作?我可以接受从Cpython或其他方式调用Jython.

python java numpy jython cpython

14
推荐指数
2
解决办法
2万
查看次数

将Jython与Maven一起使用

我有一个Maven模块,它取决于我通过我的jython代码访问的各种其他Maven依赖项.

我现在已经完成了,我想将项目编译为.jar,或者甚至只是在没有编译的情况下运行它,但我不知道从哪里开始.

有没有人知道如何运行一些访问其他包中的某些Java库的.py文件?

另外,如果完成并且好的话,如何将其编译为.jar文件?

谢谢!

maven-2 jython

14
推荐指数
2
解决办法
2万
查看次数

Jython,只使用Java中的Python方法?

在阅读和使用本文时,它假定我们有一个完整的对象定义,其中包含从python到java的类和映射(代理)对象.

是否有可能只从python中的一段代码中导入一个方法(未在类中定义,但使用内部python类),而不将其包装在类定义中(不使用上述工厂范例).

我想from myPyFile import myMethod从java 做一些,然后直接从java使用myMethod(也许作为静态方法?)?但是,如果这是可能的,我没有找到任何关于如何做的线索(文章中描述的界面东西可能仍然需要告诉Java如何使用myMethod?)

最好的祝福.

编辑:我现在正在处理Jython 2.5.2,所以它可能依赖于版本,将来会更容易?

编辑:下面回复丹尼尔:

这是一个示例代码,用于重现我得到的错误,并从您有用的回复中获得一个有效的示例!

(好吧,在从yield -ed Python/Jython结果返回Java对象的映射中添加一些其他问题)

(@Joonas,对不起,我修改了我的代码,现在我无法退回到以前的错误)

import org.python.core.Py;
import org.python.core.PyList;
import org.python.core.PyTuple;
import org.python.core.PyObject;
import org.python.core.PyString;
import org.python.core.PySystemState;
import org.python.util.PythonInterpreter;

interface MyInterface {
    public PyList getSomething(String content, String glue, boolean bool);
}
class MyFactory {

    @SuppressWarnings("static-access")
    public MyFactory() {
        String cmd = "from mymodule import MyClass";
        PythonInterpreter interpreter = new PythonInterpreter(null, new PySystemState());

        PySystemState sys = Py.getSystemState();
        sys.path.append(new PyString("C:/jython2.5.2/Lib"));

        interpreter.exec(cmd);
        jyObjClass …
Run Code Online (Sandbox Code Playgroud)

python java jython

14
推荐指数
1
解决办法
9569
查看次数

在可执行jar中打包Jython程序

我正在尝试将jython程序打包到一个可执行jar中,用户只需双击即可运行而无需提前安装jython.最后,我想包含一个我用jar编写的附加库,但是目前我只是尝试打包一个简单的程序并让它从jar运行.

我已经尝试按照"使用Jar方法"部分中的jar说明进行操作:Jython FAQ:使用Jar方法

我还在这里看了25-28幻灯片:Jython Update 2012幻灯片

最后在这里: stackoverflow问题:使用Jython将我的Python脚本分发为Jars

我在运行OS X 10.8.3的mac上安装了jython 2.5.3,jvm 1.6和python 2.7.3.

这些是我创建jar并运行它的步骤:

  1. 从我的jython安装目录创建jython.jar的副本.
  2. zip -r jython_copy.jar Lib (其中Lib是jython安装目录中的文件夹)
  3. cp myJythonProgram.py __run__.py(myJythonProgram.py不包含'if name == main '行)
  4. zip jython_copy.jar __run__.py
  5. export CLASSPATH=/path/to/my/app/jython_copy.jar:$CLASSPATH

我尝试使用以下三种方法运行jar:

  1. java org.python.util.jython -jar myapp.jar
  2. java -cp myapp.jar org.python.util.jython -jar myapp.jar
  3. java -jar myapp.jar -jar myapp.jar

如果我的程序不使用任何import语句,则此方法有效.

但是我遇到了一个问题,当我运行jar时无法找到一些python包.例如,当我from random import random在程序中包含该行时,我收到错误"ImportError:No module called random" .从javax.swing,java.awt,time或math导入时,程序中的行不会发生错误.

另外,我尝试用我的库和一个jython程序打包一个jar,它使用前面的步骤导入我的库以及以下附加步骤:

  1. zip jython_copy.jar myLibrary.jar
  2. jar ufm jython_copy.jar othermanifest.mf

othermanifest.mf只包含该行Class-Path: ./myLibrary.jar.

这也给出了错误"ImportError:No module named myLibrary"

如果我对错误或我应该采取的其他步骤有所了解,我将不胜感激. …

packaging jython executable-jar

14
推荐指数
1
解决办法
4408
查看次数

在Jython上开发Django有问题吗?

的背景

我正在和我的朋友一起构建一个公平的Web应用程序,我们决定在Python上使用Django框架.Django为我们提供了许多我们需要的功能,所以请不要建议其他框架.

我遇到的唯一决定是使用Python还是Jython来开发我们的应用程序.现在我对Java很熟悉,可能会受益于JDK中的库.我知道最小的Python,但是我使用这个项目作为学习新语言的机会 - 所以大多数工作都是用Python编写的.

Jython的吸引力当然是JVM.启用python/django的web主机的数量极少 - 而我假设我可以在各种主机上删除jython/django应用程序.这不是一个大规模的设计决定,但我认为仍然需要决定.我真的更喜欢jython而不是python,仅仅是jvm可访问性.

问题

与常规python相比,Jython有许多限制吗?在jython上运行django会导致问题吗?Jython团队与Python一起发布更新的速度有多快?Django会像Jython上的广告那样工作(预配置非常少)吗?

决策

感谢您提供的有用评论.我认为我要做的是在Jython中开发JVM支持 - 但是尝试只使用Python代码/库.可移植性不是主要问题因此,如果我需要JDK中的库(python中不易提供),我将使用它.只要Django得到全面支持,我很高兴.

python django jvm jython

13
推荐指数
1
解决办法
3065
查看次数

Clojure Jython互操作

我想知道是否有人试图以某种方式从Clojure中调用Jython函数,以及如果是这样的话你是怎么做的.我没有使用过Jython,但我认为可以像调用任何其他java代码一样调用Jython解释器,并且可以在其中运行Python程序.但是我想知道是否有可能以某种方式调用Clojure中的各个python函数.就像我说的那样,我还没有尝试过,所以它实际上可能是直截了当的.我只是想知道是否有人试过这样做.

谢谢,罗布

lisp python interop jython clojure

13
推荐指数
1
解决办法
2705
查看次数

为什么必须将"exec"(而不是"eval")用于Python导入语句?

我正在尝试使用Jython从Java中运行一段Python.如果我使用exec语句导入,一切正常.

PythonInterpreter pi = new PythonInterpreter();
pi.exec("import re");
PythonObject o = pi.eval("re.match('abc', 'abc123')"); // returns a MatchObject
o = pi.eval("re.match('abc', 'def123')"); // returns Py.None
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将两条线组合在一起,那么所有的地狱都会破裂.这个:

PythonInterpreter pi = new PythonInterpreter();
pi.eval("import re"); // exception!
PythonObject o = pi.eval("re.match('abc', 'abc123')"); // never gets here
o = pi.eval("re.match('abc', 'def123')"); // ....
Run Code Online (Sandbox Code Playgroud)

...引发异常"no viable alternative at input 'import'", ('<string>',1,0,'import re\n').

这很重要,因为理想情况下我希望能够将整个脚本作为单个字符串进行评估,而不必将导入分成单独的部分.难道我做错了什么?有没有另一种方法告诉Jython"采取这整个脚本,包括导入,然后运行它,然后给我一个结果"?这需要在运行时 - .class不能将Python预编译到文件中.

python jython eval

13
推荐指数
2
解决办法
6467
查看次数

通过Java ScriptEngine在JavaScript中使用jar

我需要使用JavaScript中的jar文件中的类.我正在通过Java ScriptEngine使用JavaScript,并希望做类似于我在这里使用Jython做的事情,

    import org.python.core.Py;
    import org.python.core.PySystemState;
    ...
    PySystemState engineSys = new PySystemState();
    engineSys.path.append(Py.newString("C:/GMSEC_API/bin/gmsecapi.jar"));
    Py.setSystemState(engineSys);
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");
Run Code Online (Sandbox Code Playgroud)

当我使用Jython执行此操作时,它工作正常,python文件可以使用jar文件中的api类.

javascript java jython scriptengine

13
推荐指数
1
解决办法
4380
查看次数