Saya menjalankan proses python di Java menggunakan ProcessBuilder. Untuk saat ini, ini adalah program pengujian sederhana yang mencetak pernyataan sebelumnya daripada mengimpor panda sebagai pd dan kemudian mencetak pernyataan lain. Ini selesai dengan kesalahan

impor panda sebagai pd ImportError: Tidak ada modul bernama pandas

Panda diinstal. Java dan ProcessBuilder Tidak dapat menemukannya.

def main():
    print("hello world before")
    import pandas as pd
    df = pd.DataFrame()
    print("after the dataframe")


main()
public class runPythonTest {

  public static void main(String[] args) {

    try{
      ArrayList<String> list = new ArrayList<>();
      list.add("python");
      list.add("/Users/loisgh/PycharmProjects/pythontest/python_test.py");
      ProcessBuilder pb = new ProcessBuilder(list);
      Process p = pb.start();
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
      BufferedReader readerError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
      String line = null;
      while ( (line = reader.readLine()) != null) {
        System.out.println(line);
      }
      while ( (line = readerError.readLine()) != null) {
        System.out.println(line);
      }

    }catch(Exception e){System.out.println(e);}
  }

}

Adakah yang bisa memberi tahu saya cara memperbaiki masalah ini dan mengungkapkan lokasi pandas ke Java.

0
user2547177 7 Juli 2020, 17:35

1 menjawab

Jawaban Terbaik

Saat Anda menggunakan ProcessBuilder, variabel lingkungan PATH Anda tidak diperhitungkan, yang merusak impor. Untuk memperbaikinya, Anda harus memberikan path lengkap ke ProcessBuilder, jadi ubah ini:

list.add("python");

Ke path lengkap ke tempat executable python Anda berada. Coba gunakan which python untuk menemukannya jika Anda menggunakan linux, atau where python jika Anda menggunakan Windows. Anda harus berakhir dengan sesuatu seperti:

list.add("users/path/2.7/python");

Juga, jika Anda memiliki beberapa versi Python yang diinstal (mis. 2.7 dan 3.7), pastikan Anda merujuk ke versi yang benar, atau keduanya telah menginstal modul.

0
Shan S 7 Juli 2020, 16:16