Kyl*_*yle 14 packaging jython executable-jar
我正在尝试将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并运行它的步骤:
zip -r jython_copy.jar Lib (其中Lib是jython安装目录中的文件夹)cp myJythonProgram.py __run__.py(myJythonProgram.py不包含'if name == main '行)zip jython_copy.jar __run__.pyexport CLASSPATH=/path/to/my/app/jython_copy.jar:$CLASSPATH我尝试使用以下三种方法运行jar:
java org.python.util.jython -jar myapp.jarjava -cp myapp.jar org.python.util.jython -jar myapp.jarjava -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,它使用前面的步骤导入我的库以及以下附加步骤:
zip jython_copy.jar myLibrary.jarjar ufm jython_copy.jar othermanifest.mfothermanifest.mf只包含该行Class-Path: ./myLibrary.jar.
这也给出了错误"ImportError:No module named myLibrary"
如果我对错误或我应该采取的其他步骤有所了解,我将不胜感激.
谢谢!
我意识到问题是什么,我想将其记录下来,以防其他人遇到同样的问题。
我使用的是 Jython 标准安装中的 jython.jar 文件,而不是独立的 jython.jar(使用 Jar 方法中的说明提到了这一点,但构建 Jars中的说明没有提到)。我仍然不确定为什么将标准安装的 Lib/ 文件夹复制到该安装附带的 jython.jar 中在我的系统上不起作用。然而,一旦我使用了独立的 jar,事情就开始变得更加顺利。
此外,除了我在问题中列出的步骤之外,我还可以通过执行三件事来让我的库使用打包文件:
分解独立的 jython.jar 并将包含所有库文件的文件夹复制到 Lib 中,然后创建一个新的 jar。这似乎是包含我的库的最简单方法,并允许我将所有内容打包到一个 jar 中。
我在阅读了 Frank Wierzbicki 在Why does Jython returns to find my Java package?中的回答后发现了这一点。因为我现在使用独立的 jar,所以我不能再使用 style 的导入from java.awt import *,而是需要完全指定我导入的每个内容,例如from java.awt.Font import PLAIN, BOLD, ITALIC. 因此,我检查了库的导入并修复了一些样式错误的内容。
现在,我将我的库直接添加到 Jar 的 Lib 文件夹中,而不是写入Class-Path: ./myLibrary.jar,othermanifest.mf我Main-Class: org.python.util.JarRunner按照 Frank Wierzbicki 在我的问题中提到的帖子中的回答:使用Jython 将我的 Python 脚本作为 JAR 文件分发?
这使我能够创建一个可双击的可执行 jar,其中包含我想要运行的库和 jython 文件。
| 归档时间: |
|
| 查看次数: |
4408 次 |
| 最近记录: |