Las mejores técnicas actuales para la distribución de sus archivos de Python en un frasco se detallan en este artículo en el wiki de Jython: http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts
Para su caso, pienso que usted quiere tomar la jython archivo .jar que se obtiene cuando instala Jython y comprime el directorio Jython Lib, luego comprime tus archivos .py y luego agrega un archivo __run__.py
con tu lógica de inicio (este archivo es tratado especialmente por Jython y será el archivo ejecutado cuando llamas al jar con "java -jar").
Este proceso es definitivamente más complicado de lo que debería ser, por lo que (los desarrolladores de Jython) necesitamos encontrar una buena herramienta que automatice estas tareas, pero por ahora estos son los mejores métodos. A continuación estoy copiando la receta en la parte inferior del artículo anterior (modificado ligeramente para adaptarse a la descripción de su problema) para darle una idea de la solución.
Crear el frasco básica:
$ cd $JYTHON_HOME
$ cp jython.jar jythonlib.jar
$ zip -r jythonlib.jar Lib
añadir otros módulos a la jarra:
$ 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
Añadir el módulo __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
en MS Windows, la última línea, establecer la variable de entorno CLASSPATH se vería así:
set CLASSPATH=C:\path\to\my\app\myapp.jar;%CLASSPATH%
O, de nuevo en MS Windows, utilice el Panel de control y las propiedades del sistema para establecer la variable de entorno CLASSPATH.
ejecutar la aplicación:
$ java -jar myapp.jar mymainscript.py arg1 arg2
O, si ha añadido el script de arranque para el frasco, utilice uno de los siguientes:
$ 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
La doble-jar es una especie de molesto, por lo que si se quiere evitar eso y conseguir el más agradable:
$ java -jar myapp.jar arg1
Vas a tener que hacer un poco más trabajo unt Si obtenemos algo como esto en un futuro Jython [Actualización: JarRunner es parte de Jython 2.5.1]. Aquí hay un código Java que busca el __run__.py
automáticamente y lo ejecuta. Tenga en cuenta que este es mi primer intento en esta clase. ¡Avíseme si necesita una mejora!
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);
}
}
pongo este código en el paquete org.python.util, ya que es donde iría si decidimos incluirlo en un futuro Jython. Para compilarlo, tendrá que poner jython.jar (o su myapp.jar) en la ruta de clases como:
$ javac -classpath myapp.jar org/python/util/JarRunner.java
A continuación, tendrá que añadir JarRunner.class a su frasco (el archivo de clase se necesita estar en org/python/util/JarRunner.class) jar llamada en el directorio "org" obtendrá la ruta completa en su jar.
$ jar uf org
Agregue esto a un archivo que va a utilizar para actualizar el manifiesto, un buen nombre es manifest.txt:
Main-Class: org.python.util.JarRunner
Entonces manifiesto de actualización de la jarra:
$ jar ufm myapp.jar manifest.txt
Ahora debería poder ejecutar su aplicación de esta manera:
$ java -jar myapp.jar
hey Frank, gracias por la información, en realidad ... una cosa, estoy recibiendo un error al comando "zip myapp .jar Lib/showobjs.py "... ¿qué se supone que debe hacer? –
Aparentemente, el intérprete jython debe invocarse antes de que mi script pueda hacer algo ... lo que me dice que "java -jar MyScript.jar" para ejecutar mi script python no es posible. ¡Muchas gracias, Frank! –
Debería poder configurar las cosas para que "java -jar MyScript.jar" funcione. Más tarde hoy editaré mis pasos para hacer un ejemplo más concreto. –