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计算最大优先级队列实例
Dec 18 Python
Python写的创建文件夹自定义函数mkdir()
Aug 25 Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
Python 类与元类的深度挖掘 I【经验】
May 06 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
深入分析python中整型不会溢出问题
Jun 18 Python
Python动态生成多维数组的方法示例
Aug 09 Python
python之super的使用小结
Aug 13 Python
Python 抓取数据存储到Redis中的操作
Jul 16 Python
用Python实现职工信息管理系统
Dec 30 Python
用pip给python安装matplotlib库的详细教程
Feb 24 Python
django注册用邮箱发送验证码的实现
Apr 18 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 年龄计算函数(精确到天)
2012/06/07 PHP
php反射应用示例
2014/02/25 PHP
隐性调用php程序的方法
2015/06/13 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
JS动画效果代码3
2008/04/03 Javascript
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
详解Vue中使用Axios拦截器
2019/04/22 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
Python类的基础入门知识
2008/11/24 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
经销商会议欢迎词
2014/01/11 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
导游词之崇武古城
2019/10/07 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis
Python实现Hash算法
2022/03/18 Python