2009-11-13 17 views
13

私はpythonでldapサーバーと通信するパッケージを書いています。私はそれがCPythonとJythonで動作するようにしたい。 CPythonで動作させるために、私はpython-ldapに対して正常にコーディングしました。しかし、Jythonを使用するには、Java jarを使用する必要があります。jythonにスクリプト内でjarを動的に追加するにはどうしたらいいですか?

パッケージにjarファイルを配布するにはどうすれば "javaをインポート"できればjythonを認識し、パスにjava jarを動的に追加してutiliziesすることができます。しかし、それが失敗すると、CPythonを認識し、python-ldapライブラリを使用します。

アイデア?

答えて

25

ただ、このように、のsys.pathにあなたのjarファイルを追加します。

~ $ 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 

それはそれよりももっと単純で得ることができませんでした:)

あなたのケースでは、おそらくあなたのパスを使用したいです瓶を見つけるためにパッケージ:

# 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 

希望に役立ちます!

+1

私は本当に素晴らしいジャイモンです。 – AndreasT

+0

"org.thobe.somepackage import SomeClass"が "some-thobe-package"パッケージの名前に基づいているかどうか不明です。私は、あなたが "組織から"必要とすることを集めます。 "some-thobe-package.jar"はインポート時に "thobe.somepackage"にどのように変換されますか? –

+0

@delinquentme jarファイルはパス内にあるので、内部構造は参照されるものです。 '-xvf/var/javalib/some-thobe-package.jar'を実行すると、構造体はorg/thobe/somepackage/SomeClass.classになります。 – Eric

関連する問題