Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索
时间:2018年10月20日
笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限,文笔粗鄙,请谅解。
本机环境:
1、win7 64 旗舰版
2、Qt 5.11.2(MSVC 2015,32 bit)
3、Python 3.7.0 (32-bit)
4、PythonQt 3.2
准备工作:
1、安装最新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
2、PythonQt是发布在Sourceforge上的一款开源的连接Qt与Python的框架,主页地址http://pythonqt.sourceforge.net
,目前更新到版本3.2,直接下载链接:https://sourceforge.net/projects/pythonqt/files/latest/download,下载后解压。
3、下载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工程并编译的过程:
1、目录结构如下图

2、将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,修改前后比对如下图所示:

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

4、修改文件PythonQt3.2\build\PythonQt.prf的内容,添加python_version,为什么python.prf中定义的变量python_version不好用,我也不清楚。修改前后比对,如下图所示:

5、修改文件PythonQt3.2\build\PythonQt_QtAll.prf的内容,同样添加python_version,修改前后比对,如下图所示:

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

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

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



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



链接器\输入,第一行是下面这样的(批处理自动生成的,这里只是进行核查),说明前面修改prf文件,并且运行批处理的过程基本正确 
11、右键,先后编译①②,②需要①工程生成的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、剩余的工程基本是些实例,右键编译,如果提示:
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下的编译 https://www.cnblogs.com/zhangzhiming/p/5407644.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混合编程 https://www.cnblogs.com/xia-weiwen/p/7932379.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! https://www.cnblogs.com/kaikai-king/p/7976339.html
QT中 使用c++调用 python http://www.cnblogs.com/shenghl/p/4442528.html
Qt+Python混合编程 https://blog.csdn.net/qq_29176963/article/details/82776575#_216
Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索的更多相关文章
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)
后记: 由于自己low,没有下载罪行的python3.2导致编译上遇到种种问题,后文可以参考,建议看: <Windows7 VS2015 下编译 PythonQt3.2> https:// ...
- 原创 C++应用程序在Windows下的编译、链接:第一部分 概述
本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...
- C++应用程序在Windows下的编译、链接(一)概述
C++应用程序在Windows下的编译.链接(一)概述 本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 c ...
- 设置 Quick-Cocos2d-x 在 Windows 下的编译环境
http://cn.cocos2d-x.org/tutorial/show?id=1304 设置 Quick-Cocos2d-x 在 Windows 下的编译环境 Liao Yulei2014-08- ...
- Windows下CMake编译安装OpenCV
Windows下CMake编译安装OpenCV 这是一个面向新手的在windows上运进opencv, helloword的教程. 在这里我们使用vs2019来编译opencv, 并运行一个hello ...
- 【FFmpeg】Windows下FFmpeg编译
由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类 ...
- ACE在windows下的编译及配置(VS2010)
ACE在windows下的编译及配置(VS2010) 分类: -[小西南]- 2013-08-06 16:17 2354人阅读 评论( ...
- [转]QGis2.9在windows下的编译以及二次开发包下载
今天心血来潮,将QGis在github上的代码更新后,又编译了一下.留意到源代码包里面的INSTALL文件有更新,于是本次编译完全基于官方的编译说明.编译过程非常顺利,除了在CMake的第一次conf ...
- windows下rabbitmq-c编译(带openssl、无需MinGW)
因为项目原因,需要使用到rabbitmq的c客户端库.首先,参见上一篇windows下openssl编译,如果已经使用cmake编译过了,则先delete cache(File-Delete Cach ...
随机推荐
- Mysql 6.0安装过程(截图放不上去)
由于免费,MySQL数据库在项目中用的越来越广泛,而且它的安全性能也特别高,不亚于oracle这样的大型数据库软件.可以简单的说,在一些中小型的项目中,使用MySQL ,PostgreSQL是最佳 ...
- Celery 图,[转]
https://www.cnblogs.com/forward-wang/p/5970806.html
- scala private
class Person private(val name:String) private 修饰整个类的参数,其实效果类似于java的私有化构造方法,无法通过new Person(..) 来实例化对象 ...
- ADO.Net创建数据模型和数据访问类及泛型集合
数据模型和数据访问类:数据模型: 使用面向对象中的封装特性,将数据表中的行数据组成一个同样结构的对象,来单独使用: 数据访问类: 将某一个表的全部增删改查操作的方法写进去,方便统一管理和调用: 数据模 ...
- Struts 框架
struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...
- hibernate ID
一:主键生成策略大体分类: 1:hibernate 负责对主键ID赋值 2:应用程序自己为主键ID赋值(不推荐使用) 3:底层数据库为主键ID赋值 二:具体用法 ...
- Object.keys(obj)--获取对象属性,该方法返回一个数组
find: function(id){ var self = this; var _id = parseInt(id, 10), id = ''; Object.keys(self.data).for ...
- JS导出网页数据到EXCEL
想得到的效果是,在网页上点击导出按钮,弹出文件保存框,输入文件名并选择路径后保存.可能是由于浏览器的安全机制,一直没能找到合适的解决方案,就采用了其它的一些替代方案. 思路是:后台一般处理程序查询数据 ...
- c++中的类(class)-----笔记(类多态)
1,多态是一种运行期绑定机制,通过这种机制,实现将函数名绑定到函数具体实现代码的目的.一个函数的名称与其入口地址是紧密相连的,入口地址是该函数在内存中的起始地址.如果对一个函数的绑定发生在运行时刻而非 ...
- Flask总结
Flask的优缺点 优点:Flask小而精,三方组件全 缺点:稳定性相对较差,三方组件版本问题,Flask一旦迭代,就可能造成三方组件不兼容的问题. flask三剑客 + 小儿子 Django ...