Распределение моих сценариев Python как файлы JAR с Jython?

Вы тестируете, использование включают, альтернатива oli и __ автозагрузка (); и протестируйте его с что-то как установленный APC.

я сомневаюсь, что постоянное использование ускорит вещи.

55
задан Peter Mortensen 10 March 2017 в 23:35
поделиться

2 ответа

Лучшие современные методы распределения файлов Python в банке подробно описаны в этой статье на вики-странице Jython: http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts

В вашем случае, я думаю, вы захотите взять файл jython.jar, который вы получаете при установке Jython, и заархивировать в него каталог Jython Lib. , затем заархивируйте свои файлы .py, а затем добавьте файл __ run __. py с вашей логикой запуска (этот файл обрабатывается Jython специально и будет исполняться, когда вы вызываете jar с помощью "java -jar ").

Этот процесс определенно более сложен, чем должен быть, и поэтому нам (разработчикам Jython) нужно придумать хороший инструмент, который автоматизирует эти задачи, но на данный момент это лучшие методы. Ниже я копирую рецепт в нижней части вышеупомянутой статьи (слегка измененный, чтобы соответствовать описанию вашей проблемы), чтобы дать вам представление о решении.

Создайте базовую банку:

$ cd $JYTHON_HOME
$ cp jython.jar jythonlib.jar
$ zip -r jythonlib.jar Lib

Добавьте другие модули в банку:

$ cd $MY_APP_DIRECTORY
$ cp $JYTHON_HOME/jythonlib.jar myapp.jar
$ zip myapp.jar Lib/showobjs.py
# Add path to additional jar file.
$ jar ufm myapp.jar othermanifest.mf

Добавьте модуль __ run __. Py :

# Copy or rename your start-up script, removing the "__name__  == '__main__'" check.
$ cp mymainscript.py __run__.py
# Add your start-up script (__run__.py) to the jar.
$ zip myapp.jar __run__.py
# Add path to main jar to the CLASSPATH environment variable.
$ export CLASSPATH=/path/to/my/app/myapp.jar:$CLASSPATH

В MS Windows последняя строка, устанавливающая переменную среды CLASSPATH, будет выглядеть примерно так:

set CLASSPATH=C:\path\to\my\app\myapp.jar;%CLASSPATH%

Или, опять же, в MS Windows, используйте панель управления и свойства системы, чтобы установить переменную среды CLASSPATH.

Запустите приложение:

$ java -jar myapp.jar mymainscript.py arg1 arg2

Или, если вы добавили свой сценарий запуска в jar, используйте одно из следующих:

$ java org.python.util.jython -jar myapp.jar arg1 arg2
$ java -cp myapp.jar org.python.util.jython -jar myapp.jar arg1 arg2
$ java -jar myapp.jar -jar myapp.jar arg1 arg2

double -jar немного раздражает, поэтому, если вы хотите избежать этого и получить больше удовольствия:

$ java -jar myapp.jar arg1

Вам придется проделать немного больше работы, пока мы не получим нечто подобное в будущем Jython [Обновление: JarRunner является частью из Jython 2.5.1]. Вот код Java, который автоматически ищет __ run __. Py и запускает его. Обратите внимание, что это моя первая попытка в этом классе. Сообщите мне, если он нуждается в улучшении!

package org.python.util;

import org.python.core.imp;
import org.python.core.PySystemState;

public class JarRunner {

    public static void run(String[] args) {
        final String runner = "__run__";
        String[] argv = new String[args.length + 1];
        argv[0] = runner;
        System.arraycopy(args, 0, argv, 1, args.length);
        PySystemState.initialize(PySystemState.getBaseProperties(), null, argv);
        imp.load(runner);
    }

    public static void main(String[] args) {
        run(args);
    }
}

Я поместил этот код в пакет org.python.util, поскольку именно там он будет находиться, если мы решим включить его в будущий Jython. Чтобы скомпилировать его, вам нужно поместить jython.jar (или ваш myapp.jar) в путь к классам, например:

$ javac -classpath myapp.jar org/python/util/JarRunner.java

Затем вам нужно добавить JarRunner.class в ваш jar (файл класса должен находиться в org / python / util / JarRunner.class), вызывая jar в каталоге "org", вы получите полный путь к вашему jar.

$ jar uf org

Добавьте это в файл, который вы будете использовать для обновления манифеста, хорошее имя - manifest.txt:

Main-Class: org.python.util.JarRunner

Затем обновите манифест jar:

$ jar ufm myapp.jar manifest.txt

Теперь вы можете запускать свое приложение следующим образом :

$ java -jar myapp.jar
66
ответ дан 7 November 2019 в 07:27
поделиться

Команда 'jythonc' должна иметь возможность скомпилировать исходный код .py в байт-код JVM, что должно сделать его переносимым для любой установки Java. По крайней мере, я читал по адресу: http://hell.org.ua/Docs/oreilly/other2/python/0596001886_pythonian-chp-25-sect-3.html

1
ответ дан 7 November 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: