Najlepsze aktualnych technik dystrybucji plików Pythona w słoiku są szczegółowo opisane w tym artykule na jython za wiki: http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts
Twoim przypadku, myślę, że chcesz wziąć Jython plik .jar, który otrzymasz po zainstalowaniu Jythona i skompresowaniu do niego katalogu Jython Lib, a następnie zapakowaniu plików .py w, a następnie dodaniu pliku __run__.py
z logiką uruchamiania (ten plik jest traktowany specjalnie przez Jython i będzie plikiem wykonywane, gdy wywołasz słoik za pomocą "java -jar").
Proces ten jest zdecydowanie bardziej skomplikowany niż powinien, więc my (programiści Jython) musimy wymyślić ładne narzędzie, które zautomatyzuje te zadania, ale na razie są to najlepsze metody. Poniżej przepisuję przepis na dole powyższego artykułu (nieco zmodyfikowany, aby pasował do twojego opisu problemu), aby dać ci sens rozwiązania.
Tworzenie podstawowego słoika:
$ cd $JYTHON_HOME
$ cp jython.jar jythonlib.jar
$ zip -r jythonlib.jar Lib
dodać inne moduły do słoika:
$ 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
dodać moduł __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
na MS Windows, tej ostatniej linii, ustawienie zmiennej środowiskowej CLASSPATH wyglądałoby mniej więcej tak:
set CLASSPATH=C:\path\to\my\app\myapp.jar;%CLASSPATH%
Lub ponownie w systemie MS Windows, użyj panelu sterowania i właściwości systemu, aby ustawić zmienną środowiskową CLASSPATH.
Uruchom aplikację:
$ java -jar myapp.jar mymainscript.py arg1 arg2
Lub, jeśli dodano skrypt startowy do słoika, należy zastosować jedną z następujących czynności:
$ 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
Podwójna -jar jest rodzajem denerwujące, więc jeśli chcesz tego uniknąć i uzyskać bardziej przyjemne:
$ java -jar myapp.jar arg1
Będziesz musiał zrobić trochę więcej pracy il dostajemy coś takiego do przyszłego Jython [Update: JarRunner jest częścią Jython 2.5.1]. Oto kod Java, który automatycznie wyszukuje numer __run__.py
i uruchamia go. Zauważ, że to moja pierwsza próba na tej klasie. Daj mi znać, czy to wymaga poprawy!
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);
}
}
umieścić ten kod na opakowaniu org.python.util, ponieważ to gdzie to udać, jeśli zdecydujemy się umieścić go w przyszłej Jython. Aby go skompilować, musisz umieścić jython.jar (lub myapp.jar) na ścieżce klasy jak:
$ javac -classpath myapp.jar org/python/util/JarRunner.java
Następnie trzeba dodać JarRunner.class do słoika (plik klasa musisz być w org/python/util/JarRunner.class) wywołując jar w katalogu "org" dostaniesz całą ścieżkę do twojego słoika.
$ jar uf org
Dodaj to do pliku, który można wykorzystać do aktualizacji manifestu, dobre imię manifest.txt:
Main-Class: org.python.util.JarRunner
następnie zaktualizować Jar w manifeście:
$ jar ufm myapp.jar manifest.txt
teraz powinieneś być w stanie uruchomić swoją aplikację w następujący sposób:
$ java -jar myapp.jar
hej Frank, dzięki za wgląd, naprawdę .. jedna rzecz, otrzymuję błąd na polecenie "zip myapp .jar Lib/showobjs.py "... co to ma zrobić? –
Najprawdopodobniej interpreter jython musi zostać wywołany zanim mój skrypt będzie mógł coś zrobić ... co mówi mi, że "java -jar MyScript.jar" do uruchomienia mojego skryptu Pythona nie jest możliwy. Dziękuję bardzo, Frank! –
Powinieneś być w stanie skonfigurować rzeczy, aby działał "java -jar MyScript.jar". Później dzisiaj będę edytować moje kroki, aby zrobić bardziej konkretny przykład. –