zoukankan      html  css  js  c++  java
  • linux下PythonQt混编记录

    看了很多博主经验,然后自己实验总结出来的,就不一一写出处了,非常感谢各位博主的分享经验。

    一、安装Python3.6

    1. 安装依赖环境

    # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

    注:openssl-devel安装失败,暂时放弃这个

    1. 下载安装Python3

    # wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz

    # tar -zxvf Python-3.6.1.tgz

    # cd Python-3.6.1

    #./configure --prefix=/usr/python --enable-shared CFLAGS=-fPIC

    这里加上--enable-shared-fPIC之后可以将python3的动态链接库编译出来,默认情况编译完lib下面只有python3.xm.a这样的文件,python本身可以正常使用,但是如果编译第三方库需要python接口的比如caffe等,则会报错;所以这里建议按照上面的方式配置,另外如果openssl不使用系统yum安装的,而是使用自己编译的比较新的版本可以使用--with-openssl=/usr/local/openssl这种方式指定,后面目录为openssl实际安装的目录,另外编译完还要将openssllib目录加入ld运行时目录中即可.

    1. 编译安装

    make && make install

    1. 建立软连接

    # ln -s /usr/local/python3/bin/python3 /usr/bin/python3

    如果/usr/bin下存在python3 ,先删除或修改文件名。

    1. 添加PATH

    # cd /etc/profile.d/

    # vim python3.sh

    export PATH="$PATH:/usr/local/python3/bin"

    wq

    # source ../profile

    # echo $PATH

    1. 检查Python3pip3是否正常可用

    # python3 -V

    # pip3 -V

    二、安装pip

    1. 安装setuptools

    wget --no-check-certificate  https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26

    tar -zxvf setuptools-19.6.tar.gz

    cd setuptools-19.6

    python3 setup.py build

    python3 setup.py install

    1. 安装pip

    wget --no-check-certificate  https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb

    tar -zxvf pip-8.0.2.tar.gz

    cd pip-8.0.2

    python3 setup.py build

    python3 setup.py install

    三、安装第三方库numpy

    #wget http://jaist.dl.sourceforge.net/project/numpy/NumPy/1.9.0/numpy-1.9.0.zip

    #unzip numpy-1.9.0.zip

    #cd numpy-1.9.0

    #python3 setup.py install

    在安装完后,直接运行python,然后输入from numpy import*,出现了

     

    发现是因为没有进对正确的路径,在运行此命令时,需要进入的路径是numpy下的tests文件夹,也就是cd numpy/tests,然后再来进行测试是否安装成功的命令。

     

    四、编写qt代码

     

    关键代码

        /* Python解释器的初始化*/

        Py_Initialize();

        if(!Py_IsInitialized())

        {

            qDebug()<< ("初始化失败!");

            return ;

        }

        PyRun_SimpleString("import sys");

        PyRun_SimpleString("sys.path.append('./')");

        /* 导入Python模块,并检验是否正确导入 */

        modulename = Py_BuildValue("s", "mytest");

        module = PyImport_Import(modulename);

    //    PyObject* module = PyImport_ImportModule("mytest"); //

        if(!module)

        {

            qDebug()<<("导入mytest失败!");

            return ;

        }

        /* 获得模块中函数并检验其有效性 */

        dic = PyModule_GetDict(module);

        if(!dic)

        {

            qDebug()<<("错误! ");

            return ;

        }

        /* 获得sum函数地址并验证 */

        func_add = PyDict_GetItemString(dic,"myadd");

        if(!PyCallable_Check(func_add))

        {

            qDebug()<<"不能找到函数 "<<"myadd";

            return ;

        }

        func_max = PyDict_GetItemString(dic,"mymax");

        if(!PyCallable_Check(func_max))

        {

            qDebug()<<"不能找到函数 "<<"mymax";

            return ;

    }

        args = PyTuple_New(2); // 2个参数

        PyObject* arg1 = PyLong_FromLong(a); // 参数一设为a

        PyObject* arg2 = PyLong_FromLong(b); // 参数二设为b

        PyTuple_SetItem(args, 0, arg1);

        PyTuple_SetItem(args, 1, arg2);

        pRet = PyObject_CallObject(func_max, NULL);

        // 获取参数

        if (pRet) // 验证是否调用成功

        {

            int result = PyLong_AsLong(pRet);

            j++;

            qDebug() << QTime::currentTime().toString(Qt::ISODate)<<":result:" << result<<":j:" << j;

     

            ui->label_2->setText(QString("time:%1 result:%2 j =%3").arg(QDateTime::currentDateTime().toString("hh:mm:ss:zzz")).arg(result).arg(j));

        }

  • 相关阅读:
    时间复杂度理解
    elementUI表单校验汇总
    严选促销中心价格计算体系的建设之路
    sqlserver日志文件太大解决方法
    数据分析的 5 种细分方法
    批处理记录电脑磁盘剩余容量并输出到txt中
    关于sqlserver收缩数据库(引起的问题、可以半途停止吗)
    Sql Server 数据库总是显示“正在恢复、恢复挂起”的解决办法
    数据库“xxx”的事务日志已满,原因为“LOG_BACKUP”
    数据库分库分表策略的具体实现方案
  • 原文地址:https://www.cnblogs.com/smh2015/p/10070936.html
Copyright © 2011-2022 走看看