2013-05-22 20 views
14

में एक ज्योथन प्रोग्राम पैकेजिंग मैं एक ज्योथन प्रोग्राम को निष्पादन योग्य जार में पैकेज करने की कोशिश कर रहा हूं, जिसे उपयोगकर्ता समय से पहले ज्योथन इंस्टॉल किए बिना चलाने के लिए डबल-क्लिक कर सकता है। आखिरकार, मैं एक अतिरिक्त पुस्तकालय शामिल करना चाहता हूं जिसे मैंने जार के साथ लिखा था, लेकिन फिलहाल मैं एक साधारण प्रोग्राम को पैकेज करने की कोशिश कर रहा हूं और इसे जार से चला रहा हूं।निष्पादन योग्य जार

मैं "जार विधि का प्रयोग" अनुभाग यहाँ में जार निर्देशों का पालन की कोशिश की है: Jython Update 2012 slides

और अंत में यहाँ: stackoverflow Question: Distributing My Python Scripts as Jars with Jython

Jython FAQ: Using the Jar Method

मैं भी स्लाइड 25-28 यहां पर ध्यान दिया है

मैंने अपने मैक पर जेईथन 2.5.3, जेवीएम 1.6, और पायथन 2.7.3 स्थापित किया है जो ओएस एक्स 10.8.3 चला रहा है।

  1. मेरी Jython स्थापना निर्देशिका से jython.jar की कॉपी बनाएं:

    ये कदम मैं के माध्यम से जाना जार बना सकते हैं और इसे चलाने के लिए कर रहे हैं।

  2. zip -r jython_copy.jar Lib
  3. cp myJythonProgram.py __run__.py (जहां लिब Jython स्थापना निर्देशिका में फ़ोल्डर है) (myJythonProgram.py शामिल नहीं है एक 'अगर नाम == मुख्य' लाइन)
  4. zip jython_copy.jar __run__.py
  5. export CLASSPATH=/path/to/my/app/jython_copy.jar:$CLASSPATH

मैंने इन तीनों तरीकों का उपयोग करके जार चलाने की कोशिश की है:

  1. java org.python.util.jython -jar myapp.jar
  2. java -cp myapp.jar org.python.util.jython -jar myapp.jar
  3. java -jar myapp.jar -jar myapp.jar

यह काम करता है अगर मेरे कार्यक्रम किसी भी आयात बयानों का उपयोग नहीं करता।

हालांकि मैं एक ऐसे मुद्दे पर चल रहा हूं जहां कुछ पाइथन पैकेज जार चलाते समय नहीं मिल पाएंगे। उदाहरण के लिए, मुझे त्रुटि मिलती है "आयात त्रुटि: कोई मॉड्यूल यादृच्छिक नहीं है" जब मैं अपने प्रोग्राम में from random import random पंक्ति शामिल करता हूं। जब मैं javax.swing, java.awt, time, या गणित से आयात करता हूं तो प्रोग्राम में लाइनों पर कोई त्रुटि नहीं होती है।

  1. zip jython_copy.jar myLibrary.jar
  2. jar ufm jython_copy.jar othermanifest.mf
:

साथ ही, मैं अपने पुस्तकालय के साथ एक जार और एक Jython प्रोग्राम है जो मेरी लाइब्रेरी पिछले चरणों का उपयोग कर के साथ-साथ निम्नलिखित अतिरिक्त कदम आयात पैकेज करने की कोशिश की

othermanifest.mf में केवल Class-Path: ./myLibrary.jar पंक्ति है।

यह भी देता त्रुटि "ImportError: नहीं मॉड्यूल नामित MyLibrary"

मैं या मैं गलत तरीके से क्या कर रहा हूँ में किसी भी अंतर्दृष्टि अन्य कदम मैं ले जाना चाहिए की सराहना करेंगे।

धन्यवाद!

+0

क्या आपने http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts#Using_Maven पर उल्लेखित मेवेन जैथन प्लगइन का उपयोग करने का प्रयास किया है? –

+0

अभी तक नहीं, लेकिन अगर मुझे यह तरीका काम करने के लिए नहीं मिल रहा है तो यह मेरा अगला कदम है। – Kyle

उत्तर

4

मुझे एहसास हुआ कि समस्या क्या थी और मैं इसे किसी अन्य समस्या के मामले में दस्तावेज करना चाहता था।

मैं jython.jar फ़ाइल का उपयोग कर रहा था जो कि ज्योथन की मानक स्थापना में आया था, और स्टैंडअलोन jython.jar नहीं (Using the Jar Method पर निर्देशों का उल्लेख है, लेकिन Building Jars पर निर्देश नहीं हैं)। मैं अभी भी अनिश्चित हूं कि मानक स्थापना के लिब/फ़ोल्डर को jython.jar में कॉपी क्यों किया गया है जो उस इंस्टॉलेशन के साथ आया था, मेरे सिस्टम पर काम नहीं करता था। हालांकि, एक बार जब मैंने स्टैंडअलोन जार का इस्तेमाल किया, तो चीजें अधिक आसानी से काम करना शुरू कर दीं।

  1. स्टैंडअलोन jython.jar और नकल एक्सप्लोडिंग:

    साथ ही, मैं चरणों मैं अपने सवाल में बाहर रखी के अलावा तीन बातें करने से पैक फ़ाइल के साथ कार्य करने के लिए अपने पुस्तकालय प्राप्त करने में सक्षम था लिब में मेरी सभी लाइब्रेरी फ़ाइलों के साथ फ़ोल्डर, फिर एक नया जार बनाएँ। यह मेरी लाइब्रेरी को शामिल करने का सबसे आसान तरीका प्रतीत होता है और मुझे सब कुछ एक जार में पैकेज करने की अनुमति देता है।

  2. मैं, Why does Jython refuse to find my Java package? में फ्रैंक Wierzbicki का जवाब पढ़ने कि क्योंकि मैं अब स्टैंडअलोन जार उपयोग कर रहा हूँ, मैं अब शैली from java.awt import * के आयात इस्तेमाल कर सकते हैं, बजाय मैं पूरी तरह से प्रत्येक बात मैं आयात करने गया था निर्दिष्ट करने के लिए की जरूरत के बाद पता चला उदाहरण from java.awt.Font import PLAIN, BOLD, ITALIC के लिए । तो मैं पुस्तकालय के आयात के माध्यम से चला गया और गलत शैली के कुछ तय किया। Distributing my Python scripts as JAR files with Jython?

:

  • अब जब कि मैं जार के लिब फ़ोल्डर में सीधे मेरी लाइब्रेरी द्वारा जोड़ा जा रहा है, इसके बजाय othermanifest.mf में Class-Path: ./myLibrary.jar लिखने की, मैं Main-Class: org.python.util.JarRunner के रूप में फ्रैंक Wierzbicki के प्रति जवाब पोस्ट मैं अपने प्रश्न में आपका उल्लेख में डाल

    इसने मुझे एक डबल-क्लिक करने योग्य निष्पादन योग्य जार बनाने की अनुमति दी जिसमें मेरी लाइब्रेरी और जेथॉन फ़ाइल है जिसे मैं चलाने के लिए चाहता था।

  • 1

    दो समाधान हैं। वे दोनों काम करते हैं, लेकिन एक दूसरे से बेहतर है।

    मेरा मानना ​​है कि आप अपनी पाइथन स्क्रिप्ट का नाम __run__.py के रूप में बदल सकते हैं, उस फ़ाइल को .jar फ़ाइल के अंदर रखें, और एक पायथन दुभाषिया के माध्यम से .jar फ़ाइल को पास करें। अधिक के लिए https://wiki.python.org/jython/UserGuide#invoking-the-jython-interpreter देखें।

    जेवीएम के माध्यम से चलते समय जावा कोड से ज्योथन चलाने के लिए कई विधियों को ज्योथन दस्तावेज में here, वर्णित किया गया है।

    संपादित करें:

    आप एक कमांड लाइन कोड है कि अजगर फ़ाइल आप चाहते हैं चलाता है निष्पादित कर सकते हैं। Link to an example of running command line code from java here.

    संबंधित मुद्दे