国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中.py文件打包成exe可執行文件詳解

2019-11-25 16:17:48
字體:
來源:轉載
供稿:網友

前言

最近做了幾個簡單的爬蟲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安裝目錄,不用更改安裝目錄)

本地下載:

        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 requestsfrom bs4 import BeautifulSoupres = 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 requestspip 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 sysimport requestsfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom bs4 import BeautifulSoupclass 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顯示效果:

當然還有許多改進的地方,比如在上面選擇日期,獲得指定日期的頭條新聞。

筆者在這片博文主要介紹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昨天做夢我還夢到呢。今天早上起來就解決了,興奮的受不了。希望在此過程中遇到的問題對你會有所幫助。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 莱芜市| 开阳县| 新干县| 阳谷县| 平罗县| 武乡县| 防城港市| 高州市| 龙胜| 涿鹿县| 新绛县| 绥江县| 文成县| 青海省| 顺平县| 漾濞| 永丰县| 宜阳县| 南宫市| 贺州市| 柳河县| 普兰县| 黔西| 连云港市| 玛曲县| 敦煌市| 河西区| 南陵县| 睢宁县| 仁怀市| 祁东县| 浙江省| 方山县| 台东市| 钟祥市| 囊谦县| 彭阳县| 凤冈县| 定南县| 永吉县| 神池县|