我正在尝试将 jython 程序打包到一个可执行 jar 中,用户只需双击即可运行,而无需提前安装 jython。最终,我想包含一个我用 jar 编写的附加库,但目前我只是想打包一个简单的程序并让它从 jar 中运行。
我已尝试按照此处“使用 Jar 方法”部分中的 jar 说明进行操作:Jython 常见问题解答:使用 Jar 方法
我还在这里查看了幻灯片 25-28:Jython 更新 2012 幻灯片
最后在这里: stackoverflow 问题:使用 Jython 将我的 Python 脚本作为罐子分发
我在运行 OS X 10.8.3 的 mac 上安装了 jython 2.5.3、jvm 1.6 和 python 2.7.3。
这些是我创建 jar 并运行它的步骤:
- 从我的 jython 安装目录创建 jython.jar 的副本。
zip -r jython_copy.jar Lib
(其中lib是jython安装目录下的文件夹)cp myJythonProgram.py __run__.py
(myJythonProgram.py 不包含 'if name == main ' 行)zip jython_copy.jar __run__.py
export CLASSPATH=/path/to/my/app/jython_copy.jar:$CLASSPATH
我尝试使用以下三种方法运行 jar:
java org.python.util.jython -jar myapp.jar
java -cp myapp.jar org.python.util.jython -jar myapp.jar
java -jar myapp.jar -jar myapp.jar
如果我的程序不使用任何导入语句,这将有效。
但是我遇到了一个问题,当我运行 jar 时无法找到一些 python 包。例如,当我from random import random
在程序中包含该行时,我收到错误“ImportError: No module named random”。当我从 javax.swing、java.awt、time 或 math 导入时,程序中的行没有出现错误。
此外,我尝试使用我的库和一个 jython 程序打包一个 jar,该程序使用前面的步骤以及以下附加步骤导入我的库:
zip jython_copy.jar myLibrary.jar
jar ufm jython_copy.jar othermanifest.mf
othermanifest.mf 仅包含该行Class-Path: ./myLibrary.jar
。
这也给出了错误“ImportError:没有名为 myLibrary 的模块”
如果我能深入了解我做错了什么或我应该采取的其他步骤,我将不胜感激。
谢谢!