本机环境

  1、win7 64 旗舰版

  2、Qt 5.9.1(MSVC 2015,32 bit)

  3、Python 3.7.1 (32-bit),二进制包安装的,即Windows x86 executable installer

  4、PythonQt 3.2 使用上面的环境,源码编译

  5、2018年10月26日

前叙

  1、为什么没有全部使用vs2015编译python。就是官方建议的pythonQt和python的编译器保持一致,实际编译中python的库编译成功了,但应该是环境问题,和官方的安装包比不是很一样。并且vs2015只能支持编译Python3.6及以下版本。

  2、为什么没有使用Anaconda进行管理。本文中使用pandas包,先前打算使用Pythoner都说pip怎么怎么麻烦,推荐的Anaconda进行包的管理,经过摸索发现,Anaconda里面包含了Python,根本不需要先安装Python,Anaconda都会内置一个Python(这个python才拥有各种包的环境),并且Anaconda不是每个python都有一个版本的。

Anaconda3-5.3.0-Windows-x86——内置python-3.7.0
Anaconda3-5.2.0-Windows-x86——内置python-3.6.5

我在编译PythonQt3.2时,设置了Anaconda中python库的位置,编译完全没有问题,但运行实例时,报错(具体错误忘记),但是使用对应版本的Python二进制安装包安装,然后编译PythonQt3.2运行实例,则正常,也就是说PythonQt3.2无法使用Anaconda提供的python库。——有解决方法,欢迎各位指正

安装pandas

  通过参考资料,因为国内被墙,pip使用国内镜像源,安装pandas,还好pip会自己安装pandas依赖的包。CMD中运行:

pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

此时配置Pycharm,可以看到已安装的包,其实也可以从pycharm中安装包,就是下图右侧稍微偏上的+ - 号那里

 

测试代码:

  要注意PythonQt3.2中import pandas会报没有模块,但是在cmd中可以。根据参考资料,包含路径即可解决,本人也尝试将这个路径加入环境变量Path,但不好用。怎么查看三方包site-packages的目录,见下图:

  

  

 

 源码:

from PythonQt.QtGui import *
import sys
# To use site-packages
sys.path.append('C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37-32\\Lib\\site-packages')

from collections import OrderedDict
from pandas import DataFrame
import pandas as pd
import numpy as np
import datetime
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 6,
                   'B': ['A', 'B', 'C'] * 8,
                   'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
                   'D': ['', '', ''] * 8,
                   'E': [datetime.datetime(2013, i, 1) for i in range(1, 13)] +
                        [datetime.datetime(2013, i, 15) for i in range(1, 13)]})
print(df)
p = pd.pivot_table(df,index=['A', 'B'], columns=['C','D'],aggfunc='count',fill_value='0',margins=True)
print(p)

 运行结果:

        A  B    C  D          E
0     one  A  foo  甲 2013-01-01
1     one  B  foo  乙 2013-02-01
2     two  C  foo  丙 2013-03-01
3   three  A  bar  甲 2013-04-01
4     one  B  bar  乙 2013-05-01
5     one  C  bar  丙 2013-06-01
6     two  A  foo  甲 2013-07-01
7   three  B  foo  乙 2013-08-01
8     one  C  foo  丙 2013-09-01
9     one  A  bar  甲 2013-10-01
10    two  B  bar  乙 2013-11-01
11  three  C  bar  丙 2013-12-01
12    one  A  foo  甲 2013-01-15
13    one  B  foo  乙 2013-02-15
14    two  C  foo  丙 2013-03-15
15  three  A  bar  甲 2013-04-15
16    one  B  bar  乙 2013-05-15
17    one  C  bar  丙 2013-06-15
18    two  A  foo  甲 2013-07-15
19  three  B  foo  乙 2013-08-15
20    one  C  foo  丙 2013-09-15
21    one  A  bar  甲 2013-10-15
22    two  B  bar  乙 2013-11-15
23  three  C  bar  丙 2013-12-15
          E                    
C       bar       foo       All
D         丙  乙  甲   丙  乙  甲    
A     B                        
one   A   0  0  2   0  0  2   4
      B   0  2  0   0  2  0   4
      C   2  0  0   2  0  0   4
three A   0  0  2   0  0  0   2
      B   0  0  0   0  2  0   2
      C   2  0  0   0  0  0   2
two   A   0  0  0   0  0  2   2
      B   0  2  0   0  0  0   2
      C   0  0  0   2  0  0   2
All       4  4  4   4  4  4  24

 

后记:

  PythonQt3.2中import pandas报没有模块,但是在cmd中可以,模块路径也在path中。是因为PythonQt初始化时

修改
PythonQt::init(PythonQt::IgnoreSiteModule | PythonQt::RedirectStdOut);
====>
PythonQt::init( PythonQt::RedirectStdOut);

 

参考资料

更换pip源到国内镜像 https://blog.csdn.net/chenghuikai/article/details/55258957

在Qt(C++)中与Python混合编程 https://www.cnblogs.com/xia-weiwen/p/7932379.html

Pycharm和Anaconda中如何安装package https://blog.csdn.net/chaowanghn/article/details/54017331

posted on 2018-10-26 11:37  jsjrj01  阅读(457)  评论(0编辑  收藏  举报