2009-11-13 15 views
13

Estoy escribiendo un paquete en python que habla con un servidor ldap. Quiero que funcione en CPython y Jython. Para que funcione con CPython, he codificado correctamente contra python-ldap. Sin embargo, para que funcione con Jython, debo usar un java jar.¿Cómo puedo agregar jars dinámicamente a jython, dentro del script?

Cómo puedo distribuir el archivo jar con mi paquete, de modo que si puede "importar java", conozca su jython, y agregue dinámicamente el archivo java a la ruta y lo utilice. Sin embargo, si eso falla, conoce su CPython y usa las bibliotecas python-ldap.

¿Alguna idea?

Respuesta

25

acaba de añadir su frasco para sys.path, así:

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

que no podría ser más sencillo de lo que :)

En su caso es probable que desee utilizar la ruta de su paquete para encontrar el tarro:

# 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 

Espero que ayude!

+1

Gracias por recordarme lo genial que era jython. – AndreasT

+0

No está claro cómo "from org.thobe.somepackage import SomeClass" se basa en el nombre del paquete "algún paquete thobe". Supongo que necesitas "de org". pero, ¿cómo se traduce "some-thobe-package.jar" a "thobe.somepackage" en la importación? –

+0

@delinquentme Dado que el archivo jar está en la ruta, su estructura interna es a la que se hace referencia. Si tuviera que ejecutar 'jar -xvf/var/javalib/some-thobe-package.jar' Vería que la estructura sería org/thobe/somepackage/SomeClass.class – Eric

Cuestiones relacionadas