Импорт банок из Jython

Я должен признать, что меня немного смущает логика импорта Jython.

Теперь я могу вручную добавить банки в sys.path, но у меня их целая куча, и это довольно болезненно.

Добавление каталога, содержащего банки, очевидно, не работает.

Каков наилучший способ сделать это?

3 ответа

Следующий код должен помочь вам и ограничить количество набираемых текстов при использовании стандартной библиотеки jython.

import os,glob,sys

directories=['/path/to/jars/','/different/path/to/more/jars/']

for directory in directories:
    for jar in glob.glob(os.path.join(directory,'*.jar')):
        sys.path.append(jar)

Лучший ответ: вы можете создать файл.pth в пакетах сайта jython и включить в него все полные пути к банкам, которые вы хотите включить в путь. Вот что я сделал, чтобы включить poi jars(содержимое файла.pth):

/home/kris/jython2.5.3/poi-3.11/poi-3.11-20141221.jar
/home/kris/jython2.5.3/poi-3.11/poi-ooxml-3.11-20141221.jar
/home/kris/jython2.5.3/poi-3.11/poi-ooxml-schemas-3.11-20141221.jar
/home/kris/jython2.5.3/poi-3.11/ooxml-lib/xmlbeans-2.6.0.jar

После этого я могу импортировать без добавления пути:

from org.apache.poi.xssf.usermodel import XSSFWorkbook
import sys
sys.path.append("/var/javalib/some-name-package.jar") # add the jar to your path
from org.somename.somepackage import SomeClass # it's now possible to import the package
some_object = SomeClass() # You can now use your java class

In your case you probably want to use the path of your package to find the jar:

# yourpackage/__init__.py

import sys, os
if 'java' in sys.platform.lower():
    sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                 "your-lib.jar"))
    from jython_implementation import library
else:
    from cpython_implementation import library

Зависит от того, как вы работаете в Jython. Один очень простой способ (если применимо) - поместить их в путь загрузки Javaперед запуском jython.

java -cp "lib/*" jython.jar <arguments>
Другие вопросы по тегам