2009-11-13 4 views
13

저는 python으로 ldap 서버와 통신하는 패키지를 작성하고 있습니다. 나는 그것이 CPython과 Jython에서 작동하기를 원한다. CPython으로 작업하게하려면 python-ldap에 대해 성공적으로 코딩했습니다. 그러나 자이 썬에서 작업하려면 자바 jar를 사용해야한다.jython에 동적으로 jar 파일을 추가하려면 어떻게해야합니까?

jar 파일을 패키지와 함께 배포하면 어떻게 "import java"가 될 수 있는지, jython을 알고 경로에 java jar를 동적으로 추가하고이를 utilizies합니다. 그러나 실패하면 CPython을 알고 python-ldap 라이브러리를 사용합니다.

아이디어가 있으십니까?

답변

25

그냥 같이, 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 

그것은 그 : 귀하의 경우

당신은 아마의 경로를 사용하고자하는 것보다 더 간단 가져올 수 없습니다 당신의 항아리를 찾을 수있는 패키지 :

# 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

관련 문제