Как я могу динамически добавлять банки в jython, внутри скрипта? - PullRequest
13 голосов
/ 13 ноября 2009

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

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

Есть идеи?

1 Ответ

25 голосов
/ 14 ноября 2009

Просто добавьте свой 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

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

В вашем случае вы, вероятно, захотите использовать путь вашего пакета, чтобы найти 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

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

...