एक जार में अपने अजगर फ़ाइलों के वितरण के लिए सबसे अच्छा वर्तमान तकनीकों Jython के विकि पर इस लेख में विस्तृत कर रहे हैं: http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts
अपने मामले के लिए, मुझे लगता है कि आप Jython लेने के लिए चाहते हो जाएगा .jar फ़ाइल है कि आप जब आप Jython स्थापित हो और Jython लिब निर्देशिका ज़िप में है, तो अपनी .py फ़ाइलें ज़िप, और उसके बाद अपने स्टार्टअप तर्क के साथ एक __run__.py
फ़ाइल जोड़ने (इस फ़ाइल 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
एमएस विंडोज, कि अंतिम पंक्ति, क्लास्स्पैट पर्यावरण परिवर्तक को सेट करना, ऐसा कुछ दिखाई देगा:
set CLASSPATH=C:\path\to\my\app\myapp.jar;%CLASSPATH%
या, एमएस विंडोज पर फिर से, नियंत्रण कक्ष और सिस्टम गुण CLASSPATH वातावरण चर सेट करने के लिए इस्तेमाल करते हैं।
आवेदन चलाएँ:
$ java -jar myapp.jar mymainscript.py arg1 arg2
या, यदि आप जार करने के लिए अपने स्टार्ट-अप स्क्रिप्ट को शामिल किया है, निम्न में से एक का उपयोग करें:
$ 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
डबल जार तरह का है कष्टप्रद है, तो आप उस से बचने और प्राप्त करना चाहते हैं, तो अधिक मनभावन:
$ java -jar myapp.jar arg1
आप में कुछ अधिक परिश्रम unt करना होगा आईएल हमें भविष्य में ज्योथन में ऐसा कुछ मिलता है [अपडेट: जाररुनर ज्योथन 2.5.1 का हिस्सा है]। यहां कुछ जावा कोड है जो __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 में शामिल करने का फैसला जहां यह जाना होगा। यह संकलन करने के लिए, आप की तरह classpath में jython.jar (या अपने myapp.jar) डाल करने के लिए की आवश्यकता होगी:
$ javac -classpath myapp.jar org/python/util/JarRunner.java
तो फिर आप अपने जार (वर्ग फ़ाइल को JarRunner.class जोड़ने की आवश्यकता होगी होगा ऑर्ग/पायथन/उपयोग/जाररुनर.क्लास में होने की आवश्यकता है) "संगठन" निर्देशिका पर जार को कॉल करने से आपके जार में पूरा रास्ता मिल जाएगा।
$ jar uf org
एक फ़ाइल है कि आप प्रकट अद्यतन करने के लिए उपयोग करेगा करने के लिए इस जोड़ें, एक अच्छा नाम manifest.txt है: अब
$ jar ufm myapp.jar manifest.txt
:
Main-Class: org.python.util.JarRunner
फिर जार के मेनिफ़ेस्ट अपडेट आपको अपना ऐप इस तरह चलाने में सक्षम होना चाहिए:
$ java -jar myapp.jar
हे फ्रैंक की सराहना की कोई मदद, अंतर्दृष्टि के लिए धन्यवाद, वास्तव में .. एक बात, मुझे कमांड में एक त्रुटि मिल रही है "ज़िप मैप .jar Lib/showobjs.py ".. यह क्या करना चाहिए? –
जाहिर है, मेरी लिपि कुछ भी करने से पहले ज्योथन दुभाषिया को बुलाया जाना चाहिए .. जो मुझे बताता है कि मेरी पाइथन लिपि चलाने के लिए "जावा -जर MyScript.jar" संभव नहीं है। धन्यवाद फ्रैंक! –
आपको चीजों को सेट करने में सक्षम होना चाहिए ताकि "जावा -जर MyScript.jar" काम करना चाहिए। बाद में आज मैं एक और ठोस उदाहरण बनाने के लिए अपने कदमों को संपादित करूंगा। –