Làm cách nào để kết nối mã python với mã java?

Theo thực tế của tôi, một trong những trường hợp cuối cùng tôi gặp là tác vụ khi công cụ ứng dụng cơ sở ở Java và tôi phải thêm tính năng Học máy mới. Thách thức chính ở đây là tính năng ML có trong Python

Vậy chúng ta sẽ làm gì? . Hoặc chúng ta có thể tìm một giải pháp thân thiện với sản xuất hiệu quả hơn. để thực thi mã python trực tiếp từ mã Java thông qua thư viện Jep [Java Embedded Python]

Thư viện JEP là gì — Bản thân Voodoo thuần túy

Dưới đây là một số trích dẫn từ Câu hỏi thường gặp của họ trên GitHub

Jep sử dụng JNI và API CPython để khởi động trình thông dịch Python bên trong JVM. Khi bạn tạo một phiên bản Thông dịch viên trong Java, một trình thông dịch Python sẽ được tạo cho phiên bản Thông dịch viên Java đó và sẽ lưu trong bộ nhớ cho đến khi phiên bản Thông dịch viên được đóng bằng Interpreter.close[].

Do nhu cầu quản lý trạng thái luồng Python nhất quán, luồng tạo phiên bản Phiên dịch phải được sử dụng lại cho tất cả các lệnh gọi phương thức đến phiên bản Phiên dịch đó

Và đây là một trích dẫn liên quan đến việc thực thi mô-đun Python

Jep nên hoạt động với bất kỳ mô-đun Python thuần túy nào. Nó hoạt động với nhiều tiện ích mở rộng CPython. Các nhà phát triển đã báo cáo rằng Jep hoạt động với NumPy, Scipy, Pandas, TensorFlow, Matplotlib, cvxpy, v.v.

Hiệu suất tốc độ là một số liệu quan trọng, đặc biệt nếu ứng dụng của bạn xử lý Dữ liệu lớn. Các thử nghiệm trong nghiên cứu của tôi cho thấy rằng việc sử dụng JEP gần như là thực thi python thuần túy

Cách thiết lập JEP cho dự án của bạn

Giả sử bạn có Java [Maven] và Python trong hệ thống của mình. Trong dự án Java, trong tệp pom.xml, bạn đặt một phụ thuộc

quả bông. phụ thuộc xml để chạy Python từ Java

Chạy trong thiết bị đầu cuối dự án

mvn clean installormvn clean install -DskipTests

Bạn đã cài đặt JEP trong Java

Để cài đặt JEP trong Python, hãy chạy

pip install jep 

Lệnh này cài đặt phiên bản JEP mới nhất. Bạn có thể chỉ định một phiên bản JEP cụ thể nếu bạn cần. Trong ví dụ của tôi, tôi sử dụng JEP 4. 0. 3 phiên bản

Phiên bản không tương thích là đáng kể ở đây. Phiên bản Python và phiên bản thư viện Jep càng thấp, bạn càng sử dụng cú pháp java phức tạp hơn [và ngược lại]. Nhưng các phiên bản JEP mới nhất có thể dễ dàng thực thi cú pháp của các phiên bản cũ của JEP

Trong hệ thống của bạn bắt buộc phải thiết lập biến môi trường. Đối với macOSX, nó sẽ giống như chạy trong thiết bị đầu cuối

export DYLD_LIBRARY_PATH="/myenv/lib/python3.8/site-packages/jep"$DYLD_LIBRARY_PATH

Và đừng quên thêm dòng tương tự vào tệp ~/.zshrc của bạn. JEP đang tìm tệp libjep.jnilib trên macOS và tệp libjep.so trên Linux

Bên cạnh đó, đối với hệ thống Linux, nó sẽ là một tên biến môi trường khác

export LD_LIBRARY_PATH="/myenv/lib/python3.8/site-packages/jep"$LD_LIBRARY_PATH

Bạn thiết lập thư viện JEP. Bây giờ bạn có thể thực thi Python trực tiếp từ Java

Cú pháp cho Python 3. 8 chip macOSX M1

Trước tiên, chúng ta nên xác định đường dẫn thư viện JEP [cụ thể là nơi Java sẽ tìm kiếm Python để thực thi] và khởi tạo đối tượng MainInterpreter

Ví dụ về cách thiết lập Đường dẫn Python cho thư viện Jep trong Java

Thứ hai — để thiết lập cấu hình JEP [chúng ta nên thêm các thư viện Python để vận hành và các thư mục dự án của chúng ta]. Sau đó, tạo một đối tượng SharedInterpreter. SharedInterpreter trực tiếp sẽ thực thi mã python hoặc tài liệu điều hành python

Ví dụ về cách thiết lập cấu hình Jep và tạo SharedInterpreter để thực thi Python

Tôi có một tài liệu python với hai chức năng đơn giản để kiểm tra công việc của JEP. Một chức năng nên sử dụng thư viện Python gốc để tìm kiếm các tài liệu cụ thể trong thư mục. Hàm thứ hai gọi thư viện Python phức tạp hơn, Spacy. Đảm bảo rằng bạn đã cài đặt trong Python thư viện Spacy với các mô hình đã tải xuống trước khi chạy Jep

Ví dụ về các hàm Python đơn giản để kiểm tra Jep

Bây giờ, chúng ta hãy chạy các hàm tài liệu Python từ Java

Ví dụ về chức năng chạy từ python_functions. tài liệu py [trăn 3. số 8]

đầu ra là

>>> [Apple, Apple, PROPN, NNP, nsubj, Xxxxx, true, false]
>>> [is, be, AUX, VBZ, aux, xx, true, true]
>>> [looking, look, VERB, VBG, ROOT, xxxx, true, false]
>>> [at, at, ADP, IN, prep, xx, true, true]
>>> [buying, buy, VERB, VBG, pcomp, xxxx, true, false]
>>> [U.K., U.K., PROPN, NNP, dobj, X.X., false, false]
>>> [startup, startup, VERB, VBD, dep, xxxx, true, false]
>>> [for, for, ADP, IN, prep, xxx, true, true]
>>> [$, $, SYM, $, quantmod, $, false, false]
>>> [1, 1, NUM, CD, compound, d, false, false]
>>> [billion, billion, NUM, CD, pobj, xxxx, true, false]

Điều này thật tuyệt. Chúng ta có thể gọi và thực thi Python trực tiếp từ Java. Nhưng khoan, còn cú pháp cho các phiên bản Python khác mà tôi đã đề cập ở đầu bài viết thì sao?

Cú pháp cho Python 3. 9 chip macOSX M1

Mình đã nói trước các bản Python và Jep cao hơn, cú pháp trong Java đơn giản hơn. Đó là bởi vì, trong các phiên bản Jep mới nhất cho Python 3. 9+ phiên bản, Nhà phát triển JEP đã thêm tính năng tự động tìm kiếm đường dẫn Python khi bạn thực hiện “pip install jep”. Hãy xem cú pháp dưới đây

Ví dụ về cách đặt đường dẫn cho jep và tạo SubInterpreter để thực thi python3. 9

Bốn dòng mã và chúng tôi có một python3. 9 Thông dịch viên trong Java. Bây giờ bạn sẽ thấy cách chạy các hàm Python từ tài liệu mà bạn đã xem

Ví dụ về cách chạy python3. 9 hàm từ Java Jep

Các bản in sẽ giống như đối với Python 3. 8 phiên bản. Đó là tất cả mọi người

kết luận

Trong hướng dẫn này, bạn đã có hướng dẫn rõ ràng về cách thực thi mã Python của mình từ bất kỳ ứng dụng Java nào cho Python 3. 8 và Trăn 3. 9 phiên bản

Tất cả code ví dụ trong bài bạn có thể chạy trên chip macOS M1 và Linux. Bạn chỉ cần setup đúng thư viện Jep cho từng hệ thống

Python kết nối với mã Java như thế nào?

Làm cách nào để kết nối mã Python với Java? . Đối số tập lệnh Python của chúng tôi có tên user_name sẽ nhận giá trị của biến tên mã Java của chúng tôi. Thực thi mã Python bằng phương thức exec[]. Nhận giá trị trả về từ Python trở lại Java. Inject a String argument which will be used by the Python code: Our Python script argument named user_name will get the value of our Java code name variable. Execute the Python code using exec[] method. Get a return value from Python back to Java.

Bạn có thể kết hợp Python và Java không?

Điều này trực tiếp giúp tăng năng suất của lập trình viên. Tương tác liền mạch giữa Python và Java cho phép các nhà phát triển tự do kết hợp hai ngôn ngữ cả trong quá trình phát triển và vận chuyển sản phẩm .

Có thể sử dụng mã Java trong Python không?

Py4J cho phép các chương trình Python chạy trong trình thông dịch Python truy cập động các đối tượng Java trong Máy ảo Java . Các phương thức được gọi như thể các đối tượng Java nằm trong trình thông dịch Python và các bộ sưu tập Java có thể được truy cập thông qua các phương thức thu thập tiêu chuẩn của Python.

Chủ Đề