Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索

时间:2018年10月20日html

  笔者最近在作Qt方面的开发工做,需用到脚本程序对程序内部进行扩展,就很天然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限,文笔粗鄙,请谅解。python

本机环境:linux

  一、win7 64 旗舰版c++

  二、Qt 5.11.2(MSVC 2015,32 bit)编程

  三、Python 3.7.0 (32-bit)windows

  四、PythonQt 3.2
api

准备工做:框架

一、安装最新Qt5.11.2,地址http://download.qt.io/archive/qt/5.11/ ,直接下载连接。测试

http://download.qt.io/archive/qt/5.11/5.11.2/qt-opensource-windows-x86-5.11.2.exe ui

二、PythonQt是发布在Sourceforge上的一款开源的链接Qt与Python的框架,主页地址http://pythonqt.sourceforge.net ,目前更新到版本3.2,直接下载连接:https://sourceforge.net/projects/pythonqt/files/latest/download,下载后解压。

三、下载Python 3.7.0 主页地址https://www.python.org/downloads/ ,直接下载连接:https://www.python.org/ftp/python/3.7.0/python-3.7.0.exe ,安装时记得勾选” Add Python 3.7 to PATH”以便注册环境变量。

生成sln工程并编译过程:

 一、目录结构以下图

二、将PythonQt3.2\createSolution.bat中的内容修改成”C:\Qt\Qt5.11.2\5.11.2\msvc2015\bin\qmake -tp vc -r PythonQt.pro“,本身根据Qt安装目录和版本进行调整,这里的qmake必定要是Qt使用的编译器的,我这里是Vs2015的qmake,改成绝对路径是由于我电脑上安装了vc6以及vs多个版本全家桶,环境变量未设置或者相互覆盖,致使混乱,因此没有使用官方文档给出的windows 编译方法PythonQt Building http://pythonqt.sourceforge.net/Building.html,修改先后比对以下图所示:

三、修改文件PythonQt3.2\build\python.prf的内容,要根据python的版本号和安装路径进行修改,修改先后比对,以下图所示:

四、修改文件PythonQt3.2\build\PythonQt.prf的内容,添加python_version,为何python.prf中定义的变量python_version很差用,我也不清楚。修改先后比对,以下图所示:

 

五、修改文件PythonQt3.2\build\PythonQt_QtAll.prf的内容,一样添加python_version,修改先后比对,以下图所示: 

六、修改PythonQt3.2\src\src.pro 文件内容,添加python_version,修改先后比对,以下图所示: 

 

七、右键管理员身份运行PythonQt3.2\createSolution.bat(管理员权限不是必须,这里只是习惯),运行结束后,会自动关闭cmd窗口,此时目录中会多出一个PythonQt.sln,目录结构以下图所示:

八、使用vs2015打开PythonQt.sln,修改目标文件名为PythonQt-Qt5-Python37,根据python的版本和安装路径,设置PythonQt-Qt5-Python37工程属性,即添加python的include和lib目录,以下图所示:

十、根据python的版本和安装路径,设置PythonQt_QtAll-Qt5-Python37工程属性,即添加include和lib目录,以下图所示:

 

连接器\输入,第一行是下面这样的(批处理自动生成的,这里只是进行核查),说明前面修改prf文件,而且运行批处理的过程基本正确 

 

十一、右键前后编译②须要①工程生成的lib和dll,因此编译有前后顺序。

①PythonQt-Qt5-Python37工程------生成----->PythonQt-Qt5-Python37.dll、PythonQt-Qt5-Python37.lib

②PythonQt_QtAll-Qt5-Python37工程------生成----->PythonQt_QtAll-Qt5-Python37.lib、PythonQt_QtAll-Qt5-Python37.dll

编译ok后,在PythonQt3.2\lib目录下,会生成的两对lib和dll,剩余的工程基本都是依赖它们。

十二、剩余的工程基本是些实例,右键编译,若是提示:

  12.1 fatal error C1083: 没法打开包括文件: “Python.h”: No such file or directory,则添加python的include目录到 附加包含目录(方法和上面的相似)

  12.2 LINK : fatal error LNK1104: 没法打开文件“python37.lib”,则添加python的libs目录到 附件库目录(方法和上面的相似)

所有编译成功后,lib文件夹内容:

 

小结:

  使用PyThonQt,比直接使用python api进行交互式编程更加的便利,官方介绍翻译——”PythonQt是Qt框架的动态Python绑定。它提供了一种将Python脚本语言嵌入C ++ Qt应用程序的简便方法。PythonQt的重点是将Python嵌入到现有的C ++应用程序中,而不是彻底用Python编写整个应用程序。若是您正在寻找一种将Python对象嵌入C ++ / Qt应用程序并经过Python 编写应用程序部分脚本的简单方法, 那么PythonQt就是您的最佳选择!PythonQt是一个稳定的库,它是为了使图像处理和可视化平台MeVisLab可使用Python脚本而开发的“。

  linux上使用官方文档中的命令行的方式(文献中有连接),编译会很顺利,但在windows上很费劲,常常由于环境变量或者目录的问题出错,这也是使用sln工程编译,而不是命令行式编译的缘由。但要要注意由于python安装使用的二进制包,不是使用源码编译,因此debug工程编译不过去的,才有了上面都是Release。官方推荐的作法是,下载python源码,使用本身电脑上的Qt编译后,在进行上面相似的操做。

  有2个疑问:为何python_version的变量很差用,为何每一个prf文件中设置的python的include和libs目录失效,而是挨个手动修改sln工程属性若是您了解,望不吝赐教,谢谢。使用这个方法编译参数会和pythonQt的解压目录写死,编译成功后,挪动文件夹位置从新编译就会失败。

  本文介绍了,使用createSolution.bat生成vs的sln工程,而后编译的过程。其实直接使用Qt打开PythonQt.pro,添加添加include和lib目录,也是可行的。为了解决上面的疑问,百度google无果,到官方论坛,找到了答案。bulid下的prf文件开发人员笔误和一些选项没设定的关系,由于开发人员只是linux/unix测试,windows没有通过完整测试,感情官方给出的在window上编译的方法其实有误的(文献1)。官方论坛开发人员早了解到,可是下载包这么长时间也不更新,哎,windows后娘省的

好比:

win32::LIBS += $$PWD/../liPythonQt_QtAll-Qt5-Python$${PYTHON_VERSION}$${DEBUG_EXT}.lib

应该是

win32::LIBS += $$PWD/../lib/PythonQt_QtAll-Qt5-Python$${PYTHON_VERSION}$${DEBUG_EXT}.lib

额。。。说是拼写错误

再就是生成的lib dll 有后缀3,致使别的工程没法找到对应的lib,这是由于没有设定CONFIG += skip_target_version_ext,由于在unix上不写没有这个问题。通过修改后,vs编译PythonQt再也不那么麻烦,呵呵,可是这篇博文写到这里实在不易,因而决定也给此文加上后缀 - 探索。

从新奉上  《Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)》但愿后来人少走弯路 

 

参考资料/文献:

PythonQt Building http://pythonqt.sourceforge.net/Building.html

PythonQt Introduction http://pythonqt.sourceforge.net/index.html

将Python嵌入到Qt程序中 https://my.oschina.net/u/2306127/blog/369663 

编译PythonQt的一点心得 https://blog.csdn.net/x18722498005/article/details/50975481

关于PythonQt3.1在Windows中的编译 https://blog.csdn.net/wcs20wp/article/details/62216103#commentBox

PythonQt在windows下的编译 http://www.javashuo.com/article/p-wpfdfsof-eb.html

编译PythonQt的一点心得 https://blog.csdn.net/x18722498005/article/details/50975481

 QT的pro文件编写,高效简洁,,路径设置 有空格 引入系统环境变量 https://blog.csdn.net/zkl99999/article/details/61197930

PythonQT 3.2 build failing on Windows https://sourceforge.net/p/pythonqt/discussion/631393/thread/45d39c91/

 

PythonQt使用
在Qt(C++)中与Python混合编程 http://www.javashuo.com/article/p-vqtxycmx-eg.html
PythonQt试用手记 https://blog.csdn.net/jingwenlai_scut/article/details/5325448
PythonQt进阶 http://www.cnblogs.com/zhangzhiming/p/5409284.html

 

C/C++使用Python API 方式与Python交互

C++调用Python浅析 https://blog.csdn.net/magictong/article/details/8947892
QT C++中直接调用python接口 https://blog.csdn.net/xiranchen/article/details/41843609
Qt与Python的混合编程相关配置以及问题说明 https://blog.csdn.net/chyuanrufeng/article/details/77753733
Qt中使用python--Hello Python! http://www.javashuo.com/article/p-amavrypp-ds.html
QT中 使用c++调用 python http://www.cnblogs.com/shenghl/p/4442528.html
Qt+Python混合编程 http://www.javashuo.com/article/p-rzgriwaj-nb.html

相关文章
相关标签/搜索