2013-05-22 10 views
14

jythonプログラムを実行可能なjarファイルにパッケージ化しようとしています.Jarthonプログラムをダブルクリックしてjythonをインストールしなくても簡単に実行できます。最終的に、私は瓶で書いた追加の図書館を含めたいと思いますが、現時点では単純なプログラムをパッケージ化して、それを瓶から実行させようとしています。実行可能なjarファイルにJythonプログラムをパッケージ化する

私はここに「ジャーメソッドを使用する」セクションでのjarの指示に従って試してみました

:私もここにスライド25-28を見てきましたJython FAQ: Using the Jar Method

Jython Update 2012 slides

そして最後に、ここで: stackoverflow Question: Distributing My Python Scripts as Jars with Jython

OS X 10.8.3を実行しているmy 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 'の場合 == メイン' 行が含まれていません)
  4. zip jython_copy.jar __run__.py
  5. export CLASSPATH=/path/to/my/app/jython_copy.jar:$CLASSPATH

これらの3つの方法のすべてを使用して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 random」というエラーが表示されます。 javax.swing、java.awt、time、またはmathからインポートすると、プログラムの行にエラーは発生しません。

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

また、私は自分のライブラリと瓶と私の前の手順を使用してライブラリだけでなく、次の追加手順をインポートJythonのプログラムをパッケージ化してみました

othermanifest.mfには、Class-Path: ./myLibrary.jarという行のみが含まれています。私は私が間違ってやったり、私が取るべき他のステップ午前何に任意の洞察力をいただければ幸いです

これもエラーに「MYLIBRARYという名前のモジュールはImportError」を提供します。

ありがとうございます!

+0

http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts#Using_Mavenに記載されているMaven Jythonプラグインを試してみましたか? –

+0

まだありませんが、私はこのメソッドを動作させることができない場合、それは私の次のステップです。 – Kyle

答えて

4

私は問題が何であるかを認識し、他の誰かが同じ問題を抱えている場合に備えて文書化したかったのです。

私はJythonの標準インストールで来たjython.jarファイルを使用していた、とNOTスタンドアロンjython.jar(Using the Jar Methodの命令はこれを言及したが、Building Jarsの指示はしないでください)。私はまだそのインストールに付属のjython.jarに標準インストールのLib /フォルダをコピーすることが私のシステムではうまくいかなかったのはまだ分かりません。しかし、一度スタンドアロンの瓶を使用すると、よりスムーズに動作するようになりました。スタンドアロンjython.jarコピーを爆発

  1. また、私は私の質問にレイアウトされた手順に加えて、3つのことを実行してパッケージ化されたファイルで動作するように私のライブラリを取得することができましたすべてのライブラリファイルをLibに保存して、新しいjarファイルを作成します。これは私のライブラリを含める最も簡単な方法と思われ、すべてを単一のjarファイルにパッケージ化することができます。

  2. 私は今、スタンドアロンのjarファイルを使用していますので、私はもはや、たとえばfrom java.awt.Font import PLAIN, BOLD, ITALICのため、代わりに私は完全に私がインポートされた各事を指定するために必要な、スタイルfrom java.awt import *の輸入を使用することができることをWhy does Jython refuse to find my Java package?にフランクWierzbickiの答えを読んだ後に発見されていません。だから私は図書館の輸入を見て、間違ったスタイルのものをいくつか修正しました。

  3. 今、私は私が私の質問に言及した記事でフランクWierzbickiの答えに従ってMain-Class: org.python.util.JarRunnerを入れて、代わりにothermanifest.mfClass-Path: ./myLibrary.jarを書き込むので、ジャーのlibフォルダに直接私のライブラリを追加していていること:Distributing my Python scripts as JAR files with Jython?

これは私が実行したいライブラリとjythonファイルを含むダブルクリック可能な実行可能なjarファイルを作成することを可能にしました。

1

2つの解決策があります。彼らはどちらも機能しますが、他のものよりも優れています。

あなたはPythonスクリプトの名前を__run__.pyと変更し、そのファイルを.jarファイルの中に置き、.jarファイルをPythonインタプリタに渡すことができます。詳細については、https://wiki.python.org/jython/UserGuide#invoking-the-jython-interpreterを参照してください。

JVMを実行中にJavaコードからJythonを実行する複数の方法については、Jythonのドキュメントでhere,と記載されています。

EDIT:

あなたが欲しいのpythonファイルを実行するコマンドラインのコードを実行することができます。 Link to an example of running command line code from java here.

関連する問題