2017-05-15 106 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創建一個變量。