استفاده از جاوا در پایتون

با سلام، روش های مختلفی برای استفاده از جاوا (کتابخانه ها و کد ها به زبان جاوا) درون کد های پایتون وجود داره، 

از معروف ترین این روش های میتوان موارد زیر رو نام برد:

من درون پروژه پردازش زبان طبیعی که انجام میدم نیاز به استفاده از یه تیکه کد جاوا که از فارس نت استفاده می کرد درون کد پایتونم داشتم، برای حل مشکل از PY4j استفاده کردم و در ادامه یه توضیح مختصری در مورد نصب و استفاده از py4j درون پایتون رو میدم (سیستم عاملی که استفاده کردم ubuntu 16.0.4)

نصب py4j : برای نصب کافیه دستور زیر رو در ترمینال اجرا کنید:

pip install py4j

یا دستور :

easy_install py4j

فراموش نکنید که دستورات فوق را با sudo اجرا کنید. با اجرای دستورات فوق py4j درون PYTHONPATH قرار خواهد گرفت و Py4J Java library درون مسیر share/py4j/py4j0.x.jar. خواهد بود که آدرس دقیق مبتنی بر سیستم عامل و پلتفرمی هست که استفاده می کنید:

  1. برای نصب در لینوکس : usr/share/py4j/py4j0.x.jar or /usr/local/share/py4j/py4j0.x.jar
  2. نصب در virtual environment (آشنایی با virtualenv) محیط مجازی پایتون :virtual_env_dir}/share/py4j/py4j0.x.jar 
  3. نصب در ویندوز : C:\python27\share\py4j\py4j0.x.jar

در ادامه مثال مختصری از استفاده از py4j در پایتون آورده شده است (مرجع). برنامه نوشته شده به زبان پایتونی که در پایین می بینید یک نمونه از  java.util.Random از یک JVM می سازد و تعدادی از method های آن را فراخوانی می کند.همچینن به یک کلاس سفارشی با نام AdditionApplication نیز دسترسی برقرار کرده و برای افزودن اعداد تولید شده استفاده می کند.

>>> from py4j.java_gateway import JavaGateway
>>> gateway = JavaGateway()                   # connect to the JVM
>>> random = gateway.jvm.java.util.Random()   # create a java.util.Random instance
>>> number1 = random.nextInt(10)              # call the Random.nextInt method
>>> number2 = random.nextInt(10)
>>> print(number1,number2)
(2, 7)
>>> addition_app = gateway.entry_point        # get the AdditionApplication instance
>>> addition_app.addition(number1,number2)    # call the addition method
9

در ادامه کد جاوایی که در یک زکان اجرا می شود آورده شده است (کدی تولید نمی شود و ابزاری برای اجرا شدنش نیاز نیست). نمونه AdditionApplication app در کد قبلی  gateway.entry_point است. توجه بشه که برنامه جاوا باید قبل از اجرا شدن کد پایتون بالایی شروع شده باشد . به عبارت دیگر Py4j خودش JVM رو اجرا نمی کند.

public class AdditionApplication {

  public int addition(int first, int second) {
    return first + second;
  }

  public static void main(String[] args) {
    AdditionApplication app = new AdditionApplication();
    // app is now the gateway.entry_point
    GatewayServer server = new GatewayServer(app);
    server.start();
  }
}

 

ادامه دارد…