Как я могу добавить jars динамически в jython, внутри script?

Я пишу пакет в python, который говорит с сервером ldap. Я хочу, чтобы он работал в CPython и Jython. Чтобы заставить его работать с CPython, я успешно закодирован в отношении python-ldap. Однако, чтобы заставить его работать с Jython, я должен использовать java-банку.

Как я могу распространять файл jar с моим пакетом, так что, если он может "импортировать java", он знает свой jython и динамически добавляет java-банку на путь и использует его. Однако, если это не удается, он знает свой CPython и использует библиотеки python-ldap.

Любые идеи?

Ответы

Ответ 1

Просто добавьте 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 now possible to import the package
>>> some_object = SomeClass() # You can now use your java class

Это не могло быть проще, чем это:)

В вашем случае вы, вероятно, захотите использовать путь своего пакета, чтобы найти банку:

# 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

Надеюсь, что это поможет!