SORU
10 AĞUSTOS 2009, PAZARTESİ


Jython ile kavanozları benim python komut dosyaları dağıtmak?

Neredeyse 2 yıldır bir python programcısı ve küçük komut ofiste yapmam gereken bazı tekrarlayan görevleri otomatik hale getirmek için yazmaya alışkınım. Şimdi, anlaşılan meslektaşlarım bunu fark etmiş ve bu komut çok istiyorlar.

Bazıları Mac, windows, windows bunları yaptım. Py2exe hatta py2app kullanma imkanı senaryomu yerlileri yapmak için araştırdım, ama onlar asla.. beni tatmin etti

Hepsi kendi sistemleri üzerinde JVM olduğunu bilmek geldi, bu yüzden onları tek bir yürütülebilir ver kavanoz senaryomu jython olabilir gibi bir şey kullanarak dosya olabilir miyim?

Nasıl mümkün olur Bu..., komut dosyaları yazmak için nasıl bilmiyordum jython için yani ikisi de... ne tür sorunlar verecektir bunu yazdığımda çok önemsiyorum mi?

CEVAP
10 AĞUSTOS 2009, PAZARTESİ


Bir kavanoza Python dosyalarını Jython. wiki'de bu makalede ayrıntılı dağıtmak için mevcut en iyi teknikler: http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts

Davan için, Jython yükleyin ve Jython Lib dizini zip, o zaman zip, aldığınız jython.jar dosyayı almak isteyeceğini düşünüyorum .py dosyaları ve sonra Ekle __run__.py dosyası ile başlangıç mantığı (bu dosyayı özel olarak ele alınır tarafından Jython ve olacak dosya çalıştırıldığında Ara kavanozu "java -jar").

Bu işlem çok daha karmaşık sonra olmalı, ve bu yüzden biz (Jython geliştiriciler) lazım güzel bir araç olacak otomatikleştirme bu işler ama şimdilik bu en iyi yöntem. Yukarıdaki madde ile biraz sorun açıklaması uyarlayan) altındaki tarifi çözümün bir fikir vermesi açısından kopyalıyorum aşağıya.

Temel kavanoz oluşturun:

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

Kavanoz için diğer modülleri ekleyin:

$ 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

Ekle __run__.py modülüdür

# 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, son satır, SINIF ortam değişkeni ayarı, bu gibi bir şey olacaktır

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

Ya da, yine MS Windows, Denetim Masası ve Sistem SINIF ortam değişkeni ayarlamak için özelliklerini kullanın.

Uygulamayı çalıştırın:

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

Ya da, eğer devreye kavanoz için komut dosyası eklendi varsa, aşağıdakilerden birini kullanın:

$ 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

Çift kavanoz varsa bunu önlemek ve daha hoş almak istiyorsanız bu yüzden biraz sinir bozucu:

$ java -jar myapp.jar arg1

Gelecekteki bir Jython [Güncelleme: JarRunner 2.5.1 Jython] bir parçası olduğunu böyle bir şey alana kadar biraz daha fazla iş yapmak zorunda kalacaksın. Burada __run__.py için otomatik olarak görünüyor ve çalışan bir Java kodu. Bu sınıf benim ilk deneyin unutmayın. Eğer iyileştirme ihtiyacı varsa bana bildirin!

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 içine bu kodu koydum.python.eğer gelecekteki bir Jython dahil edilmesine karar verirsek nereye gideceğini beri açıklama paket. Derlemek için, bir sınıf içine jython.jar (veya myapp.jar) gibi koymak gerekir:

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

Senin kavanoz (sınıf dosyası org/python/util/jarrunner.class olması gerekiyor) JarRunner.class üzerinde jar "" directory kavanoza. yolun tamamını alacak org arama eklemeniz gerekir sonra

$ jar uf org

Bildirim güncelleme için kullanacağınız bir dosya ekleyin, güzel bir isim manifest.txt:

Main-Class: org.python.util.JarRunner

Sonra güncelleme kavanoz bildirim:

$ jar ufm myapp.jar manifest.txt

Şimdi bu uygulamayı çalıştırmak mümkün olmalıdır:

$ java -jar myapp.jar

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ImBluecams

    ImBluecams

    25 Kasım 2012
  • Jason Rosolowski

    Jason Rosolo

    25 EKİM 2006
  • Tomas N

    Tomas N

    14 Kasım 2010