Python中.py文件打包成exe可执行文件详解


Posted in Python onMarch 22, 2017

前言

最近做了几个简单的爬虫python程序,于是就想做个窗口看看效果。

首先是,窗口的话,以前没怎么接触过,就先考虑用Qt制作简单的ui。这里用前面sinanews的爬虫脚本为例,制作一个获取当天sina头条新闻的窗口。

生成py文件后,运行该py文件,这里窗口我只是随便拖了几个组件进去,主要的text browser用于显示获取到的sinanews。

首先贴一下我的配置

官方下载:

       Python 3.3.3

        PyQt5-5.2.1 for Py3.3(当安装完Python3.3后,安装对应PyQt,其会找到Python安装目录,不用更改安装目录)

Python3.3默认是没有安装pip的,需要下载get-pip.py运行之后,提示安装成功。

接下来就要安装一些必要的组件了。为了安装方便,先把pip添加进环境变量。

下面我们就可以用pip命令安装组件了。

先把sina_news.py贴出来,观察需要哪些组件。

import requests
from bs4 import BeautifulSoup
res = requests.get('http://news.sina.com.cn/china/')
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text,'html.parser')

for news in soup.select('.news-item'):
 if len(news.select('h2')) > 0:
 h2 = news.select('h2')[0].text
 a = news.select('a')[0]['href']
 time = news.select('.time')[0].text
 print(time,h2,a)

发现import requests,import BeautifulSoup 所以先来安装这些组件

pip install requests

pip install BeautifulSoup4

当我们把这段代码贴进窗口代码后:

x.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'x.ui'
#
# Created by: PyQt5 UI code generator 5.8.1
#
# WARNING! All changes made in this file will be lost!
import sys
import requests
from PyQt5 import QtCore, QtGui, QtWidgets
from bs4 import BeautifulSoup

class Ui_x(object):
 def getNews():
 res = requests.get('http://news.sina.com.cn/china/')
 res.encoding = 'utf-8'
 soup = BeautifulSoup(res.text,'html.parser')
 title = []
 for news in soup.select('.news-item'):
 if len(news.select('h2')) > 0:
 h2 = news.select('h2')[0].text
 title.append(h2)
 a = news.select('a')[0]['href']
 time = news.select('.time')[0].text
 return '\n'.join(title)

 
 def setupUi(self, x):
 x.setObjectName("x")
 x.resize(841, 749)
 self.timeEdit = QtWidgets.QTimeEdit(x)
 self.timeEdit.setGeometry(QtCore.QRect(310, 10, 141, 31))
 self.timeEdit.setObjectName("timeEdit")
 self.dateEdit = QtWidgets.QDateEdit(x)
 self.dateEdit.setGeometry(QtCore.QRect(100, 10, 191, 31))
 self.dateEdit.setObjectName("dateEdit")
 self.textBrowser = QtWidgets.QTextBrowser(x)
 self.textBrowser.setGeometry(QtCore.QRect(60, 80, 701, 641))
 self.textBrowser.setObjectName("textBrowser")
 self.retranslateUi(x)
 QtCore.QMetaObject.connectSlotsByName(x)

 def retranslateUi(self, x):
 _translate = QtCore.QCoreApplication.translate
 x.setWindowTitle(_translate("x", "x"))

if __name__ == '__main__': 
 app = QtWidgets.QApplication(sys.argv)
 Form = QtWidgets.QWidget()
 ui = Ui_x()
 ui.setupUi(Form)
 Form.show()
 ui.textBrowser.setText(Ui_x.getNews())
 sys.exit(app.exec_())

如果前面顺利的话,现在用python运行x.py应该能看到显示的窗口。

下面就是打包的过程了,这里笔者用的Pyinstaller,没有安装的话,要安装一下:

pip install pyinstaller

安装完成后,cmd路径cd到x.py所在目录。

打包命令:

Pyinstaller -w x.py

此时,在x.py便生成dist文件夹,打包的x.exe就在此文件夹下。双击x.exe显示效果:

Python中.py文件打包成exe可执行文件详解

当然还有许多改进的地方,比如在上面选择日期,获得指定日期的头条新闻。

笔者在这片博文主要介绍py文件的打包过程。

可能遇到的问题:

打开打包后的程序无法运行显示:

ImportError: No module named 'queue'

During handling of the above exception, another exception occurred:

 Traceback (most recent call last):
 File "test.py", line 2, in <module>
 File "c:\users\hasee\appdata\local\programs\python\python35-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
 exec(bytecode, module.__dict__)
 File "site-packages\requests\__init__.py", line 63, in <module>
 File "c:\users\hasee\appdata\local\programs\python\python35-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
 exec(bytecode, module.__dict__)
 File "site-packages\requests\utils.py", line 24, in <module>
 File "c:\users\hasee\appdata\local\programs\python\python35-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
 exec(bytecode, module.__dict__)
 File "site-packages\requests\_internal_utils.py", line 11, in <module>
 File "c:\users\hasee\appdata\local\programs\python\python35-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
 exec(bytecode, module.__dict__)
 File "site-packages\requests\compat.py", line 11, in <module>
 File "c:\users\hasee\appdata\local\programs\python\python35-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
 exec(bytecode, module.__dict__)
 File "site-packages\requests\packages\__init__.py", line 29, in <module>
ImportError: No module named 'urllib3'
Failed to execute script test

当然这个错误代码,当时我没有保留,这是版本不匹配造成的:

我的Pyinstaller为3.2

需要降低requests的版本,requests2.10可以成功打包,而2.11就不行。这里贴上解决此问题用到的requests2.10不知道以后会不会修复这个问题。这个bug昨天做梦我还梦到呢。今天早上起来就解决了,兴奋的受不了。希望在此过程中遇到的问题对你会有所帮助。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python闭包的两个注意事项(推荐)
Mar 20 Python
Tensorflow卷积神经网络实例
May 24 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
python如何实现一个刷网页小程序
Nov 27 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
Python 数据可视化pyecharts的使用详解
Jun 26 Python
python删除某个目录文件夹的方法
May 26 Python
Python Mock模块原理及使用方法详解
Jul 07 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
python3中dict(字典)的使用方法示例
Mar 22 #Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 #Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 #Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 #Python
python条件变量之生产者与消费者操作实例分析
Mar 22 #Python
Python实现遍历目录的方法【测试可用】
Mar 22 #Python
Python简单操作sqlite3的方法示例
Mar 22 #Python
You might like
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
python实现爬虫下载漫画示例
2014/02/16 Python
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
python3实现绘制二维点图
2019/12/04 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
家长给学校的建议书
2014/05/15 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
2014年资料员工作总结
2014/11/18 职场文书
2014年教研组工作总结
2014/11/26 职场文书
2015年导购员工作总结
2015/04/25 职场文书
宾馆客房管理制度
2015/08/06 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python