2013-02-22 2 views
5

Jython standalone jar бросает исключение ImportError в то время, когда я пытаюсь использовать Jython вместе с Apache-POI.Автономный Jython: Ошибка импорта (Apache-POI)

Ниже вы найдете, как я называю мой Jython сценарий:

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

Ошибка:

Traceback (самый последний вызов последнего):

Файл "main.py" , строка 32, in

от org.apache.poi.hssf.usermo дель импорт *

ImportError: Нет модуль с именем апач

Это код в строке # 32:

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

Есть ли какое-либо ограничение с Jython для работы с третьей Явой сторонних приложений?

Спасибо заранее,

ответ

7

Вы не можете использовать -cp и -jar в то же время. Опция -jar переопределяет любые другие параметры пути. См. http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html.

Используя свойство python.path системы должны работать:

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

Вот альтернативная команда:

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

Однако, оказывается, что ни одна из этих команд не работают с standalone Jython. Вы получаете ImportError, как говорится в вопросе. Существует старая открытая ошибка, которая кажется актуальной: http://bugs.jython.org/issue1422 (она говорит, что проблема существует в Solaris, но она применима и к другим платформам, насколько я могу судить).

Использование installed Jython и команды jython работает отлично:

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

Обратите внимание, что автономный jython.jar включает в себя стандартные модули библиотеки Python (в папке Lib). Эти модули не включены в jython.jar, которые вы получаете с установленным Jython.

Я надеюсь, что этот ответ поможет, даже если он не может полностью решить вашу проблему.

+0

Он все еще бросает сообщение об ошибке: ImportError. – Eder

+0

Но что произойдет, если я хочу отпустить это для его использования на другом компьютер? Можно ли его упаковать? – Eder

+0

«Базовая установка» jython.jar делает не включают стандартные библиотечные файлы Python, которые объединены в автономный jython.jar. Это нужно учитывать, конечно. Я не уверен, какое лучшее решение в вашем случае. – mzjn

1

Вы можете попытаться добавить баночку в путь системы как этот

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

А потом попробуйте запустить тот же сценарий. Хотя было бы лучше использовать модуль os для перехода к пути. Я не уверен, как слэши обрабатываются в jython на ОС Windows.

+0

@Arshard_Ansari:! Он до сих пор не работает .. это что-то связано с версией jython, которую я использую? (Jython Standalone 2.7b) – Eder

3

Я пытался воспроизвести вашу проблему и столкнулся с ней в версии 2.5.3 автономного Jython. Также попытался с POI 3.7; все та же сделка. Я также попробовал предложение sys.path.append, сделанное Аршадом. Что-то своеобразное, что здесь происходит (тестирование с другой библиотекой - на этот раз 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'] 
>>> 

Посмотрите, как путь получает вскарабкался из-разделители «\»?

(Также попробовал python.path предложение, но он дает ту же ошибку, как вы сообщили.)

Может быть, вы работаете в this reported issue или нечто подобное/связанные? Кажется, он соответствует сценарию (автономная версия) и версиям, которые вы и я использовали.

3

Такая же проблема с jython 2.5.4-rc1 автономная с использованием commons-lang3-3.1.jar и т. Д. Я должен использовать ее в автономном режиме, так что это очень расстраивает! :-(

EDIT: Этот человек понял это Why does Jython refuse to find my Java package?

Вы должны добавить следующие флаги для Jython автономной работы

java -Dpython.cachedir.skip=false -Dpython.cachedir=/tmp {...} 
Смежные вопросы