首页 新闻 会员 周边 捐助

java调用python脚本运行提示no module named 模块名

0
悬赏园豆:20 [已解决问题] 解决于 2017-09-30 17:23

Java对于简单python脚本还可以识别运行,但是一旦脚本有import第三方库,Java运行报错no module named 第三方库名 ,已经将第三方库放置到java同级目录下面了,请问还有哪里出问题了,把代码也贴上好了

package com.python.test;

import java.util.Properties;

import org.python.core.PyFunction;
import org.python.core.PyObject;
import org.python.core.PyString;
import org.python.util.PythonInterpreter;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("python.console.encoding", "UTF-8"); // Used to prevent: console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0.
        props.put("python.security.respectJavaAccessibility", "false"); //don't respect java accessibility, so that we can access protected members on subclasses
        props.put("python.import.site","false");
        Properties preprops = System.getProperties();
        PythonInterpreter.initialize(preprops, props, new String[0]);
        PythonInterpreter interp = new PythonInterpreter();
        interp.exec("import sys");
        interp.exec("sys.path.append('C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\Lib')");//jython自己的
        interp.exec("sys.path.append('C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\Lib\\site-packages')");//jython自己的
        interp.exec("sys.path.append('D:\\pyworkpeace\\train.py')");//我们自己写的
        
        PythonInterpreter interpreter = new PythonInterpreter();  
        interpreter.execfile("D:\\pyworkpeace\\train.py");  
        PyFunction func = (PyFunction)interpreter.get("login",PyFunction.class);  
        String url = "https://www.tianyancha.com/login";
        String  username = "15160773967";
        String   password = "yy171827";
        PyObject pyobj = func.__call__(new PyString(url), new PyString(username),new PyString(password));

            


//            }     

    }

}
bethansy的主页 bethansy | 初学一级 | 园豆:105
提问于:2017-09-21 08:50
< >
分享
最佳答案
0

自己试出来了

package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class MyDemo {
    
    public static void main(String[] args) { 
        try {
           System.out.println("start");
           String[] args1=new String[]{"python","D:\\pyworkpeace\\9_30_1.py"};
           Process pr=Runtime.getRuntime().exec(args1);
           
           BufferedReader in = new BufferedReader(new InputStreamReader(
             pr.getInputStream()));
           String line;
           while ((line = in.readLine()) != null) {
            System.out.println(line);
           }
           in.close();
           pr.waitFor();
           System.out.println("end");
          } catch (Exception e) {
           e.printStackTrace();
          }}
    public void test(){
        System.out.println("我的第一个方法C");
    }

}

调用的是D盘下的9_30_1.py文件,得到的结果如下:

start
[ 1. 1. 1.]
java 调用有第三方库的python脚本成功
end

python文件的内容:

import numpy as np

if __name__ == '__main__':
    a = np.ones(3)
    print(a)
    print('java 调用有第三方库的python脚本成功')
bethansy | 初学一级 |园豆:105 | 2017-09-30 13:42

你好,我复制出来你的代码,无法解决numpy问题。
环境jdk1.7
anconda3
jython2.7

惟有饮者留其名。 | 园豆:200 (初学一级) | 2019-05-08 15:15
其他回答(2)
1

最快捷的方式是:

写个.bat的运行脚本可以运行py文件

然后java中使用http://mvnrepository.com/artifact/org.zeroturnaround/zt-exec 这个启动bat脚本,参数可以传递

 

省去调试python依赖的环境变量内容

收获园豆:20
2012 | 园豆:21645 (高人七级) | 2017-09-22 08:25

你好,我将bat文件发在和python脚本同一个目录下,bat文件内容如下 python  ..\py_file.py,我的是windows系统,python后面没有加-i,但是我双击bat文件,输出框闪退,我根本不知道bat脚本是否正常调用了py文件?该怎么看呢

支持(0) 反对(0) bethansy | 园豆:105 (初学一级) | 2017-09-28 17:37

@bethansy: 使用dos命令行进入运行看看

键盘WIN+R 输入 cmd 即可进入dos

支持(0) 反对(0) 2012 | 园豆:21645 (高人七级) | 2017-09-29 07:59
0

为什么 我copy你的代码 不能运行啊

我需要学习 | 园豆:116 (初学一级) | 2018-07-04 15:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册