Nota: Ho trovato la soluzione e ho risposto a me stesso. Tuttavia, non ho idea del perché quell'impostazione fosse sbagliata e abbia causato il problema. Sono ancora interessato ad avere una buona spiegazione su come funziona il sistema di importazione Jython; se qualcuno si preoccupa di ottenere la grazia, per favore risponda a questo.Impossibile importare classi Java dal modulo Jython
Sto lavorando a un progetto Java EE esistente in cui ho bisogno di fare calcoli in Python. Sono alle prime fasi dei test di integrazione ma sto già affrontando un problema. Ho letto Chapter 10 of Jython book ma non riesco ancora a trovare una soluzione. Leggo anche Chapter 8 (Moduli e pacchetti per il riutilizzo del codice) ma per me non è chiaro.
Una spiegazione di come funziona il sistema di importazione Jython e come configurarlo sarebbe molto apprezzato.
Il problema:
$ jython -v
import: 'exceptions' as org.python.core.exceptions in builtin modules
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35)
[Java HotSpot(TM) Server VM (Oracle Corporation)] on java1.7.0_10
import: import site # precompiled from /home/me/jython/2.5.3/Lib/site$py.class
import: 'sys' as sys in builtin modules
import: import os # precompiled from /home/me/jython/2.5.3/Lib/os$py.class
import: 'errno' as org.python.modules.errno in builtin modules
import: 'posix' as org.python.modules.posix.PosixModule in builtin modules
import: import posixpath # precompiled from /home/me/jython/2.5.3/Lib/posixpath$py.class
import: import stat # precompiled from /home/me/jython/2.5.3/Lib/stat$py.class
import: 'java' as java package
import: 'File' as java class
import: 'IOException' as java class
import: 'org' as java package
import: 'Py' as java class
Type "help", "copyright", "credits" or "license" for more information.
>>> import pendulum.generator.BuildingType
import: import pendulum # precompiled from /path/to/project/build/classes/pendulum/__init__$py.class
import: import pendulum.generator # precompiled from /path/to/project/build/classes/pendulum/generator/__init__$py.class
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named BuildingType
La mia domanda è: Che cosa sto facendo di sbagliato e come posso risolvere le cose per importare l'interfaccia BuildingType successo? Forse il problema sta in CLASSPATH, ma non ho idea di quale valore potrebbe essere appropriato.
organizzazione Codice:
$ tree build/classes/pendulum/generator/ src/pendulum/generator/
build/classes/pendulum/generator/
├── BuildingType.class
├── __init__.py
└── __init__$py.class
src/pendulum/generator/
├── BuildingType.java
└── __init__.py
Importa percorso definito da un private Jython registry file:
$ cat ~/.jython
python.path=\
/path/to/project/build/classes:\
/path/to/project/src:\
/home/me/jdevel/extras/2.5.3/Lib:\
/home/me/jdevel/extras/2.5.3/Lib/site-packages
Sono sicuro Jython raccoglie i percorsi perché ho controllato che con sys.path
al prompt di Jython.
BuildingType.java
package pendulum.generator;
public interface BuildingType {
public String getBuildingName();
public String getBuildingAddress();
public String getBuildingId();
}
provare "da pendolo.Generatore di importazione BuildingType" – sarwar
ImportError:? Non è possibile importare nome BuildingType – Paolo
è jython.jar in jre/lib/ext –