Python 运行 在 Java ProcessBuilder 下无法找到 pandas 导入

Python Running under Java ProcessBuilder cannot not find pandas import

我是 运行 python 在 Java 中使用 ProcessBuilder 的进程。现在它是一个简单的测试程序,它打印出一个 before 语句而不是 imports pandas as pd 然后打印出另一个语句。结束时出现错误

导入 pandas 作为 pd 导入错误:没有名为 pandas

的模块

Pandas 已安装。 Java 和 ProcessBuilder 就是找不到它们。

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);}
  }

}

有人能告诉我如何解决这个问题并将 pandas 的位置显示给 java。

当您使用 ProcessBuilder 时,它不会考虑您的 PATH 环境变量,这会中断导入。要解决此问题,您必须提供 ProcessBuilder 的完整路径,因此请更改:

list.add("python");

到 python 可执行文件所在的完整路径。如果您使用 linux,请尝试使用 which python 找到它,如果您使用 Windows,请尝试使用 where python 找到它。你应该以这样的方式结束:

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

此外,如果您安装了 Python 的多个版本(例如 2.7 和 3.7),请确保您指的是正确的版本,或者两者都安装了该模块。