Pao*_*olo 13 python java import jython
注意:我找到了解决方案并自己回答.虽然,我不知道为什么这个设置错了并导致了问题.我仍然对Jython导入系统如何工作有一个很好的解释感兴趣; 如果有人关心获得赏金,请回答.
我正在开发一个现有的Java EE项目,我需要在Python中进行计算.我正处于集成测试的第一阶段,但我已经面临一个问题.我阅读了Jython书的第10章,但仍无法找到解决方案.我还阅读了第8章(代码重用的模块和包),但对我来说还不清楚.
关于Jython导入系统如何工作以及如何配置它的解释将非常感激.
问题:
$ 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
Run Code Online (Sandbox Code Playgroud)
我的问题是:我做错了什么以及如何解决成功导入BuildingType接口的问题?也许问题出在CLASSPATH中,但我不知道哪个值适合.
代码组织:
$ 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
Run Code Online (Sandbox Code Playgroud)
由私有Jython注册表文件定义的导入路径:
$ 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
Run Code Online (Sandbox Code Playgroud)
我确定Jython选择了路径,因为我sys.path在Jython提示符下检查了它.
BuildingType.java
package pendulum.generator;
public interface BuildingType {
public String getBuildingName();
public String getBuildingAddress();
public String getBuildingId();
}
Run Code Online (Sandbox Code Playgroud)
在尝试/捕获方法上浪费了大量时间之后,我自己找到了答案。
.jython必须如下所示:
python.path=\
/path/to/project/build:\
/path/to/project/src:\
/home/me/jdevel/extras/2.5.3/Lib:\
/home/me/jdevel/extras/2.5.3/Lib/site-packages
Run Code Online (Sandbox Code Playgroud)
不是这个:
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
Run Code Online (Sandbox Code Playgroud)
特别是,添加/path/to/project/build/classes到导入路径是错误的(即使它反映了文件系统层次结构),而添加到导入路径/path/to/project/build是正确的并解决了问题。
| 归档时间: |
|
| 查看次数: |
7335 次 |
| 最近记录: |