2017-05-15 70 views
2

我想导入Java包 “TestPackage” 到Jython脚本,Jython的Java包import语句

import TestPackage 
print TestPackage.SampleClass().getMessage(); 

我收到以下错误,

ImportError: No module named TestPackage","errorPoint":"","lineNumber":"1","errorPointMessage":"in <module>\nImportError: No module named TestPackage 

当我使用from TestPackage import SampleClass工作正常。如果我执行from <pacakage> import <anyclass>声明一次,那么import <pacakage>工作没有导入错误。

我试过设置PySystemState.add_package("TestPackage"),这个工程但是导致内存泄漏。

有没有其他方法可以利用import TestPackage?我如何在没有内存泄漏的情况下在jython中使用“import <packagename>”?

+0

什么是TestPackage的完整软件包名称?例如,'org.example.test.TestPackage'将被导入为'import org.example.test.TestPackage'或者'from org.example.test import TestPackage'。与Java相同:)如果jar文件不在Jython类路径中,请添加它。作为一个快速入门,'import sys; sys.path.append('/ path/to/testpackage.jar')'工作。 – IceArdor

+0

它位于包名称为“TestPackage”的类路径中。 – Kajal

回答

0

这是由于Java和Python的区别。

在Java中,您可以导入类,静态导入常量和静态方法。你不能导入一个包。 import java.util;是编译错误,但import java.util.Collections;import java.util.Collections.*;都没问题。 Java包是组织一堆类的一种方式,但不是不具有构造函数,方法或常量的类。我喜欢将Java包视为包含属于该包的所有类的zip文件。 Java包只是一个命名空间。

在Python中,您可以导入模块,类和导入类,函数和常量。但是,Python模块比Java包更像Java类。它不仅仅是一个“类的zip文件”,而是一个包含子类的类。 Python模块是一个文件夹中的一个脚本集合,其中包含一个init .py,它定义了该模块的类和方法。因此,你可以做一些事情,比如import collections。 Python也可以让你做import collections.OrderedDictfrom collections import OrderedDictfrom collections import OrderedDict as OD

我希望这可以解释为什么你不能导入你的Java包。你必须从该Java包中导入一些东西(可能是一个类),以便python创建一个变量。