2013-02-22 4 views
5

Il jar autonomo Jython lancia l'eccezione ImportError nel momento in cui si tenta di utilizzare Jython accanto a Apache-POI.Jython autonomo: errore di importazione (Apache-POI)

qui di seguito troverete come io chiamo il mio script Jython:

java -cp C:\jAutoMailerScript\lib\poi-3.9-20121203.jar -jar jython.jar main.py 

Errore:

Traceback (chiamata più recente scorso):

File "main.py" , riga 32, in

da org.apache.poi.hssf.usermo del import *

ImportError: No module named apache

Questo è il codice alla riga # 32:

from org.apache.poi.hssf.usermodel import * 

C'è alcuna restrizione da Jython, al fine di lavorare con terza di Java applicazioni di partito?

Grazie in anticipo,

risposta

7

Non è possibile utilizzare -cp e -jar allo stesso tempo. L'opzione -jar sostituisce qualsiasi altra impostazione del percorso della classe. Vedi http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html.

Usando la proprietà di sistema python.path dovrebbe funzionare:

java -Dpython.path=C:\jAutoMailerScript\lib\poi-3.9-20121203.jar -jar jython.jar main.py 

Ecco un comando alternativo:

java -cp C:\jAutoMailerScript\lib\poi-3.9-20121203.jar;jython.jar org.python.util.jython main.py 

Tuttavia, si scopre che nessuno di questi comandi funzionano con standalone Jython. Ottieni uno ImportError, proprio come dice la domanda. C'è un vecchio bug aperto che sembra rilevante: http://bugs.jython.org/issue1422 (dice che il problema esiste su Solaris, ma vale anche per altre piattaforme, per quanto ne so).

Utilizzando installed Jython e il comando jython funziona bene:

jython -Dpython.path=C:\jAutoMailerScript\lib\poi-3.9-20121203.jar main.py 

Si noti che il jython.jar standalone include i moduli della libreria standard di Python (nella cartella Lib). Questi moduli non sono inclusi nel file jython.jar che si ottiene con Jython installato.

Spero che questa risposta aiuti, anche se potrebbe non risolvere completamente il problema.

+0

Sta ancora lanciando il messaggio di eccezione: ImportError. – Eder

+0

Ma cosa succederebbe se volessi rilasciarlo perché fosse usato su un altro computer? Sarebbe possibile comprimerlo? – Eder

+0

L'installazione di base jython.jar non funziona non includere i file Python standard della libreria che sono raggruppati nel file jython.jar standalone. Questo deve essere considerato, ovviamente. Non sono sicuro di quale sia la soluzione migliore nel tuo caso. – mzjn

1

Si può cercare di aggiungere il barattolo al percorso di sistema come questo

sys.path.append('C:\jAutoMailerScript\lib\poi-3.9-20121203.jar') 

e quindi provare a eseguire lo stesso script. Anche se sarebbe meglio usare il modulo os per arrivare al percorso. Non sono sicuro di come le barre siano trattate in jython su Windows OS.

+0

@Arshard_Ansari:! Non è ancora lavorando .. ha qualcosa a che fare con la versione jython che sto usando? (Jython Standalone 2.7b) – Eder

3

Ho cercato di riprodurre il problema e ho riscontrato lo stesso problema con la versione 2.5.3 di Jython standalone. Anche provato con POI 3.7; ancora lo stesso accordo. Ho anche provato il suggerimento sys.path.append, fatto da Arshad. Qualcosa di strano sta succedendo qui (il test con una libreria diversa - questa volta barcode4j):

c:\development\local\lib\jython-sa-2.5.3>java -jar jython-standalone-2.5.3.jar 
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35) 
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.7.0_10 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.path 
['', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\Lib', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\jython-standalone-2.5.3.jar\\Lib', '__classpath__', '__pyclasspath__/'] 
>>> sys.path.append('C:\development\local\lib\barcode4j-2.0\build\barcode4j.jar') 
>>> sys.path 
['', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\Lib', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\jython-standalone-2.5.3.jar\\Lib', '__classpath__', '__pyclasspath__/', 'C:\\development\\local\\lib\x08arcode4j-2.0\x08uild\x08arcode4j.jar'] 
>>> 

vedere come il percorso viene criptato a causa di delimitatori del '\'?

(anche provato il suggerimento python.path ma dà lo stesso errore da te segnalato.)

Potrebbe essere si sta eseguendo in this reported issue o qualcosa di simile/related? Sembra che corrisponda allo scenario (versione standalone) e alle versioni che io e te abbiamo usato.

3

Lo stesso problema con jython 2.5.4-rc1 standalone usando commons-lang3-3.1.jar, ecc. Devo usarlo in modalità Standalone quindi è molto frustrante! :-(

EDIT: Questa persona capito tutto Why does Jython refuse to find my Java package?

È necessario disporre di aggiungere i seguenti flag per Jython standalone di lavorare

java -Dpython.cachedir.skip=false -Dpython.cachedir=/tmp {...}