如何将jars动态添加到jython内部脚本?

gre*_*urn 14 jython

我在python中编写一个与ldap服务器通信的包.我希望它能在CPython和Jython中运行.为了使它与CPython一起使用,我已成功编写了针对python-ldap的代码.但是,要使它与Jython一起使用,我必须使用java jar.

我如何使用我的包分发jar文件,这样如果它可以"导入java",它就知道它的jython,并动态地将java jar添加到路径中并使用它.但是,如果失败,它会知道它的CPython并使用python-ldap库.

有任何想法吗?

tho*_*obe 25

只需将您的jar添加到sys.path,如下所示:

~ $ jython
Jython 2.5.0+ (trunk:6691, Aug 17 2009, 17:09:38) 
[Java HotSpot(TM) Client VM (Apple Computer, Inc.)] on java1.6.0-dp
Type "help", "copyright", "credits" or "license" for more information.
>>> from org.thobe.somepackage import SomeClass # not possible to import yet
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named thobe
>>> import sys
>>> sys.path.append("/var/javalib/some-thobe-package.jar") # add the jar to your path
>>> from org.thobe.somepackage import SomeClass # it's now possible to import the package
>>> some_object = SomeClass() # You can now use your java class
Run Code Online (Sandbox Code Playgroud)

它不能比那简单得多:)

在您的情况下,您可能希望使用包的路径来查找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
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!