我必须承认我对Jython导入逻辑感到有些困惑。
我现在可以手动将jar一个一个地添加到sys.path但是我有一大堆这些,这非常痛苦。
添加包含jar的目录显然不起作用。
最好的方法是什么?
答案 0 :(得分:6)
以下代码应该为您提供技巧,并限制在使用标准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)
更好的回答: 您可以在jython site-packages中创建一个.pth文件,并在其中包含要包含在路径中的jar的所有完整路径。这是我做的包括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
答案 1 :(得分:1)
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
答案 2 :(得分:1)
取决于你如何运行Jython。一种非常简单的方法(如果适用)是将它们放在Java 引导类路径 之前运行jython
java -cp "lib/*" jython.jar <arguments>