Я пытаюсь упаковать jython-программу в исполняемый jar, который пользователь может просто дважды щелкнуть, чтобы запустить, не устанавливая jython раньше времени. В конечном счете, я хотел бы добавить дополнительную библиотеку, которую я написал с банкой, но на данный момент я просто пытаюсь упаковать простую программу и запустить ее из банки.
Я пробовал следовать инструкциям jar в разделе "Использование метода Jar" здесь: Вопросы по Jython: Использование метода Jar
Я также посмотрел на слайды 25-28: Jython Update 2012 слайды
И, наконец, здесь: qaru.site/info/82703/...
Я установил jython 2.5.3, jvm 1.6 и python 2.7.3 на мой Mac, который работает с OS X 10.8.3.
Вот шаги, которые я предпринимаю, чтобы создать банку и запустить ее:
- Создайте копию jython.jar из каталога установки jython.
-
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
Я попытался запустить банку, используя все три из этих методов:
-
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
Это работает, если моя программа не использует никаких операторов импорта.
Однако я столкнулся с проблемой, когда некоторые пакеты python не могут быть найдены, когда я запускаю банку. Например, я получаю сообщение об ошибке "ImportError: No module named random", когда я включаю строку from random import random
в свою программу. Ошибок не возникает в строках в программе, когда я импортирую из javax.swing, java.awt, time или math.
Кроме того, я попытался упаковать банку с моей библиотекой и программой jython, которая импортирует мою библиотеку с использованием предыдущих шагов, а также следующие дополнительные шаги:
-
zip jython_copy.jar myLibrary.jar
-
jar ufm jython_copy.jar othermanifest.mf
othermanifest.mf содержит только строку Class-Path: ./myLibrary.jar
.
Это также дает ошибку "ImportError: Нет модуля с именем myLibrary"
Я был бы признателен за любое понимание того, что я делаю неправильно или другие шаги, которые я должен предпринять.
Спасибо!