2017-05-15 5 views
2

は、私がJythonスクリプトに "TestPackage" Javaパッケージをインポートしたい、JythonのJavaパッケージのimport文

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

私はfrom TestPackage import SampleClassが正常に動作し使用した場合、私は、

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

を、次のエラーを取得しています。 from <pacakage> import <anyclass>ステートメントを1回実行すると、インポートエラーなしでimport <pacakage>が機能します。

PySystemState.add_package("TestPackage")を設定しようとしましたが、これは動作しますがメモリリークを引き起こします。

import TestPackageを使用する別の方法はありますか? jythonでメモリリークのない「import <packagename>」を使用するにはどうすればよいですか?

+0

TestPackageの完全なパッケージ名は何ですか?たとえば、 'org.example.test.TestPackage'は' import org.example.test.TestPackage'または '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 OrderedDict、およびfrom collections import OrderedDict as ODもできます。

Javaパッケージをインポートできない理由を説明してください。 Pythonが変数を作成するには、そのJavaパッケージから何か(おそらくクラス)をインポートする必要があります。

関連する問題