【问题标题】:jar or exe file from Sikuli python script来自 Sikuli python 脚本的 jar 或 exe 文件
【发布时间】:2017-11-10 03:06:26
【问题描述】:

我刚开始在 Python 中使用 Sikuli 编写一些脚本。

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

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

【问题讨论】:

  • 我认为在这种情况下我仍然需要每台机器的 sikuli(运行 setup.jar)
  • 不,将您的脚本转换为可执行文件就可以了。它运行所需的所有内容都将打包到可执行文件中。
  • 感谢 py2exe,我能够在 exe 中转换一个简单的 python 脚本。不幸的是,我不知道如何为我的 sikuli 程序打包所有必需的数据。在一个文件夹中有:sixulix.jar、python 脚本(“sikuli_test.py”)和所有图像。我的 setup.py 应该如何?现在是这样的: from distutils.core import setup;导入py2exe;设置(控制台=['sikuli_test.py'])
  • 您可能希望在 setup.py 中包含所需的 jar,例如 here。否则,您可以创建一个浅 java Main,并从中创建一个可执行的 fat jar,包括 sikuli 库。 (特别是如果你将在 Linux 上运行它,我怀疑 .exe 会起作用)

标签: python jar exe sikuli sikuli-script


【解决方案1】:

使用 jar 文件,如 Sikuli is written in Java and uses Jython。你需要做三件事才能让它发挥作用。

获取Sikuli罐子:

首先获取sikuli-java.jar 文件(step-by-step instructions here),您可以通过下载sikuli-setup.jar 获得该文件,然后使用选项4(仅Java)和6(所有操作系统兼容)运行它。这应该会下载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

其中&lt;packageName&gt; 是包装器TestJ.java 类的包。

您还需要将 Jython 添加到此 jar 中。只需按照下面“jar 中的 Python .py 文件”部分的前几个步骤,或 download the standalone Jython jar 并在下面的“组合 jars”部分中以与 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 添加到包含您的脚本的jar 中,使用jar 作为mentioned in the note above。如果您愿意,也可以combine the two jar files(也可以使用jar)。

无论哪种方式,这都会为您提供一个 jar 文件,该文件可以在任何具有兼容 JVM 的系统上运行您的 Sikuli 程序。运行它使用

java -jar myapp.jar

恭喜你,大功告成!

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

【讨论】:

  • 但是这样我不能“混淆”代码,对吧?我想分发我的程序,尽可能隐藏源代码
  • @user3472065 当然可以! Jython 最终已经编译为 Java,您可以使用 Jython 编译器 (jythonc) 将您的 .py 苍蝇 放入 jar 之前将它们转换为字节码。我将添加一个关于它的部分。
  • 现在我有了我的 SikuliScirpt.class。我不明白这一步 => “然后你可以使用包装类从 Java 调用这些编译文件(看起来像 myFile$py.class)(请参阅完整说明以获取示例)。这个包装器调用单个 Python 方法,所以你可以让那个方法成为你的主要 Python 方法,启动你的程序的其余部分。”我从来没有用java开发过任何东西,你能一步一步解释我应该怎么做吗?
  • @user3472065 如果您查看混淆版本的完整说明,那么您可以使用该类的示例。
【解决方案2】:

有很多方法可以将 .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)

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 啊,好吧,我是这个网站的新手,所以谢谢你。将编辑我的一些答案,谢谢。
  • 感谢 py2exe,我能够在 exe 中转换一个简单的 python 脚本。不幸的是,我不知道如何为我的 sikuli 程序打包所有必需的数据。在一个文件夹中有:sixulix.jar(需要制作独立程序)、python 脚本(“sikuli_test.py”)和所有图像。我的 setup.py 应该如何?现在是这样的: from distutils.core import setup;导入py2exe;设置(控制台=['sikuli_test.py'])
  • 我意识到这是一个旧线程,你是否让它按照你想要的方式工作,即。使得访问 python 源代码变得非常困难(尽管如果代理真的想反汇编您的代码代码,这并非不可能)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 2013-08-14
  • 2018-04-13
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多