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实现的维尼吉亚密码算法示例
Apr 12 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
python tkinter窗口最大化的实现
Jul 15 Python
Django 框架模型操作入门教程
Nov 05 Python
Python API自动化框架总结
Nov 12 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
Apr 20 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
pip install命令安装扩展库整理
Mar 02 Python
opencv实现图像几何变换
Mar 24 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支持分块与断点续传文件下载功能代码
2014/05/09 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
js实现登录与注册界面
2017/11/01 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
python处理json数据中的中文
2014/03/06 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
python面试题之列表声明实例分析
2019/07/08 Python
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
车工岗位职责
2013/11/26 职场文书
委托公证书范本
2014/04/03 职场文书
经典毕业生求职信
2014/07/12 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书