Импорт банок из 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>