来自Sikuli python脚本的jar或exe文件

时间:2017-10-31 19:10:06

标签: python jar exe sikuli sikuli-script

我刚开始用Python中的Sikuli做一些脚本。

我想知道是否有可能(如果是的话,如何)从我的python脚本(文件.py和图像)创建一个jar或exe文件。

我想从其他没有安装sikuli的机器(例如java -jar my_script.jarmy_script.exe)轻松运行我的程序,或者将实用程序交给某些同事,但我不希望这样他们看到了源代码。

2 个答案:

答案 0 :(得分:0)

有很多方法可以将.py转换为.exe和excetra

虽然我相信可以更改扩展名,但如果你使用python的扩展程序,这个过程会更容易和顺畅,就像Py2exe一样,下载可以通过简单的谷歌搜索找到(我还包括一个链接到他们的网站下面)。该程序将允许您将程序转换为.exe并将运行而无需安装python。

以下是信誉良好且选项良好的列表:http://www.freehackers.org/Packaging_a_python_program

我个人推荐Py2exe(http://www.py2exe.org/),可以在这里找到Py2exe的教程(http://www.py2exe.org/index.cgi/Tutorial

答案 1 :(得分:0)

使用jar文件,Sikuli is written in Java and uses Jython。为了实现这一点,您需要做三件事。

获取Sikuli jar:

首先获取sikuli-java.jar文件(step-by-step instructions here),您可以通过下载sikuli-setup.jar获取该文件,并使用选项4(仅Java)和6(所有OS兼容)运行它。这应该下载sikuli-java.jar文件。

将您的脚本本身分配​​为jar:

混淆版本:

您可以使用Jython(full instructions here)编译Python:

$JYTHON_HOME/jython $JYTHON_HOME/Lib/compileall.py python_src/

其中python_src是包含所有.py个文件的目录。

然后,您可以使用包装类从Java调用这些编译文件(看起来像myFile$py.class)(请参阅示例的完整说明)。 这个包装器调用一个Python方法,因此您可以将该方法作为主要的Python方法,启动程序的其余部分。

编译包装类:

javac -cp $JYTHON_HOME/jython.jar TestJ.java

然后jar all your .class files

jar cvfe myapp.jar <packageName>.TestJ *.class

其中<packageName>是包装器TestJ.java类的包。

您还需要将Jython添加到此jar中。只需按照下面“jar中的Python .py文件”部分的前几个步骤或download the standalone Jython jar进行操作,并在下面的“组合罐子”部分中以与sikuli-java.jar相同的方式包含它。

jar中的Python .py文件:

现在您必须为脚本本身创建jar。 full instructions are here,但如果你想要摘要:

  

获取安装Jython时获得的jython.jar文件并将Jython Lib目录压缩到其中,然后压缩.py文件,然后使用启动逻辑添加__run__.py文件(此文件由Jython特别处理,并且是使用java -jar)调用jar时执行的文件。

如果您愿意,还可以从python.org获得more general guide

注意:
上面的完整说明假设您拥有zip程序。如果不这样做,则可以使用jar uvf jythonlib.jar Lib代替zip -r jythonlib.jar Lib(并且在使用zip的地方执行类似操作)。 See here for more

组合罐子

您只需使用sikuli-java.jar mentioned in the note abovejar添加到包含脚本的jar中。如果您愿意,也可以combine the two jar files(也使用jar)。

无论哪种方式,这应该给你一个jar文件,可以在任何具有兼容JVM的系统上运行你的Sikuli程序。使用

运行它
java -jar myapp.jar

恭喜,你已经完成了!

如果您需要处理命令行参数,请参阅stack overflow guidefull Python guide,或者通常需要更多详细信息。