Java 내에서 Python 사용
중복 가능성 :
Java Python 통합
100 % Java로 작성된 기존의 대규모 코드베이스가 있지만 일부 새로운 섹션에 Python을 사용하고 싶습니다. 나는 약간의 텍스트와 언어 처리를해야하고, 이것을하기 위해 파이썬과 NLTK 와 같은 라이브러리를 훨씬 더 많이 사용하고 싶습니다 .
나는 Jython 프로젝트를 알고 있지만 이것이 다른 방법이 아닌 Python 내에서 Java 및 해당 라이브러리를 사용하는 방법을 나타내는 것처럼 보입니다. 내가 잘못 했습니까?
그렇지 않은 경우 (이상적으로) Python에서 메서드를 호출하고 결과를 Java로 반환 할 수 있도록 Java와 Python 간의 인터페이스에 가장 좋은 방법은 무엇입니까?
감사합니다.
나는 Jython 프로젝트를 알고 있지만 이것이 다른 방법이 아닌 Python 내에서 Java 및 해당 라이브러리를 사용하는 방법을 나타내는 것처럼 보입니다. 내가 잘못 했습니까?
네, 틀 렸습니다. 당신도 명령 줄 인터프리터 전화 Jyton 또는 사용하여 런타임 파이썬 코드에 자바에서 사용하는 파이썬 코드를 . 과거에는 python-to-Java 컴파일러도 있었지만 Jython 2.2에서 중단되었습니다.
텍스트 및 언어 처리를 처리하는 Python 모듈을 작성한 다음 Java 프로그램이 상호 작용할 수있는 작은 다리를 자이 썬에 구축합니다. 자이 썬 브리지는 매우 간단한 것으로, 실제로는 호출을 python 모듈로 전달하고 python 모듈에서 자바 모듈로 응답을 반환하는 역할 만 담당합니다. 자이 썬은 정말 사용하기 쉬우 며 설정하는 데 15 분 이상 걸리지 않습니다.
행운을 빕니다!
JVM으로 이식되지 않은 Numpy에 의존하기 때문에 Jython에서 NLTK를 사용할 수 없다고 생각합니다. NLTK 또는 기타 기본 CPython 확장이 필요한 경우 일부 IPC 메커니즘을 사용하여 CPython과 JVM간에 통신하는 것을 고려할 수 있습니다. 즉, Jepp라는 Java에서 CPython을 호출 할 수있는 프로젝트가 있습니다.
그 반대 (CPython에서 Java 코드 호출)는 JPype 및 javaclass의 목표입니다.
sourceforge.net/projects/jpype/
pypi.python.org/pypi/javaclass/0.1
저는이 프로젝트를 한 번도 사용한 적이 없어서 그 품질에 대해 서약 할 수 없습니다.
Jython은 JVM에서 실행되는 Python 구현입니다. 사용자 가이드 에서 기존 자바 앱에 Python을 포함하는 방법에 대한 정보를 찾을 수 있습니다 .
현재 작업중인 환경은 모르지만 동일한 앱에서 언어를 혼합하면 금방 엉망이 될 수 있습니다. Python 코드를 래핑하는 개별 패키지 구현 클래스와 함께 사용할 작업을 나타내는 Java 인터페이스를 만드는 것이 좋습니다.
제 생각에는 자이 썬이 바로 당신이보고있는 것입니다.
그것은이다 구현 은 JVM 내에서 파이썬의; 따라서 객체를 자유롭게 교환 할 수 있으며, 예를 들어 Java 클래스에서 상속 할 수 있습니다 (일부 제한 있음).
C (또는 다른 컴파일 된 언어로 작성된 모든 (C) Python 확장 기능을 사용할 수 없기 때문에)의 주요 강점 (JVM 위에 있음)도 주요 단점입니다. 이것은 당신이 당신의 텍스트 처리로 무엇을 하려는지에 영향을 미칠 수 있습니다.
Jython이 무엇인지, 잠재력과 한계에 대한 자세한 정보는 Jython FAQ 를 읽어 보시기 바랍니다 .
Java 내에서 Python 인터프리터를 하위 프로세스로 실행하기 만하면됩니다.
Python 기능을 stdin에서 읽고 stdout에 쓰는 적절한 스크립트로 작성하십시오.
Java Runtime
클래스를 사용 하여 Python 스크립트를 실행하는 하위 프로세스를 생성합니다. 이것은 매우 간단하고 매우 깨끗한 인터페이스를 제공합니다.
편집하다
import simplejson
import sys
for request in sys.stdin.readlines():
args = simplejson.loads( request )
result = myFunction( args['this'], args['that'] )
sys.stdout.writeline( simplejson.dumps( result ) + "\n" )
인터페이스는 단순하고 구조적이며 매우 낮은 오버 헤드입니다.
먼저 개발 비용을 지불하는 사람들로부터 지금부터 Python과 Java를 모두 알고있는 개발자가 필요한 코드베이스와 의심 할 여지없이 이미 고려한 기타 비용 및 유지 관리 효과에 대해 괜찮은지 확인해야합니다.
참조 : http://www.acm.org/about/se-code 1.06, 2.03, 2.09, 4.03, 4.05, 6.07
참고 URL : https://stackoverflow.com/questions/1164810/using-python-from-within-java
'program story' 카테고리의 다른 글
"thead"와 관계없이 테이블의 "tbody"를 스크롤하는 방법은 무엇입니까? (0) | 2020.12.13 |
---|---|
웹팩을 사용하여 CSS와 JS를 별도로 생성 할 수 있습니까? (0) | 2020.12.13 |
이미 다른 포크를 포크 한 경우 원래 리포지토리를 포크하려면 어떻게해야합니까? (0) | 2020.12.13 |
소셜 미디어 버튼은 웹 사이트로드 시간을 늦 춥니 다. (0) | 2020.12.13 |
템플릿 매개 변수에 의존하는 인수가 없습니다. (0) | 2020.12.12 |