Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung des Beispielcodes zum Packen von .py-Dateien in ausführbare Exe-Dateien in Python
Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum Packen von .py-Dateien in ausführbare EXE-Dateien ein. Ich glaube, dass er für jeden, der ihn benötigt, einen gewissen Referenzwert hat Zusammen. Schauen Sie mal rein.
Vorwort
Ich habe kürzlich ein paar einfache Crawler-Python-Programme erstellt, deshalb wollte ich ein Fenster erstellen, um den Effekt zu sehen.
Zuallererst habe ich mit Windows noch nicht viel Kontakt gehabt, daher werde ich zunächst darüber nachdenken, Qt zu verwenden, um eine einfache Benutzeroberfläche zu erstellen. Hier verwenden wir das vorherige Sinanews-Crawler-Skript als Beispiel, um ein Fenster zu erstellen, um die Sina-Schlagzeilen des Tages abzurufen.
Führen Sie nach dem Generieren der py-Datei die py-Datei aus. Ich habe gerade ein paar Komponenten in das Fenster gezogen. Der Haupttextbrowser wird verwendet, um die erhaltenen Sinanews anzuzeigen.
Zuerst meine Konfiguration posten
Offizieller Download:
PyQt5-5.2.1 für Py3 .3 (Nach der Installation von Python3.3 installieren Sie das entsprechende PyQt, das das Python-Installationsverzeichnis findet. Das Installationsverzeichnis muss nicht geändert werden.)
Lokaler Download:
PyQt5-5.2.1 für Py3.3 (Nach der Installation von Python3.3 installieren Sie das entsprechende PyQt, das das Python-Installationsverzeichnis findet. Das Installationsverzeichnis muss nicht geändert werden.)
Python3.3 verfügt nicht pip ist standardmäßig installiert. Sie müssen get-pip.py herunterladen und ausführen. Es wird angezeigt, dass die Installation erfolgreich ist.
Der nächste Schritt besteht darin, einige notwendige Komponenten zu installieren. Um die Installation zu vereinfachen, fügen Sie zunächst pip zu den Umgebungsvariablen hinzu.
Jetzt können wir den pip-Befehl verwenden, um die Komponente zu installieren.
Veröffentlichen Sie zuerst sina_news.py und beobachten Sie, welche Komponenten benötigt werden.
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)
Ich habe Importanfragen gefunden, BeautifulSoup importieren, also installieren wir zuerst diese Komponenten
pip install requests pip install BeautifulSoup4
Nachdem wir diesen Code in den Fenstercode eingefügt haben:
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_())
Wenn alles gut geht, sollten Sie das angezeigte Fenster sehen können, wenn Sie x.py in Python ausführen.
Das Folgende ist der Verpackungsprozess. Der Autor verwendet hier Pyinstaller. Wenn es nicht installiert ist, müssen Sie es installieren:
pip install pyinstaller
Nachdem die Installation abgeschlossen ist, geben Sie den Cmd-Pfad ein in das Verzeichnis, in dem sich x.py befindet.
Paketierungsbefehl:
Pyinstaller -w x.py
Zu diesem Zeitpunkt wird der dist-Ordner in x.py generiert und die gepackte x.exe befindet sich in diesem Ordner. Doppelklicken Sie auf x.exe, um den Effekt anzuzeigen:
Natürlich gibt es viele Verbesserungen, wie z. B. die Auswahl eines Datums oben und das Abrufen der Schlagzeilen des angegebenen Datums.
Mögliche Probleme:
Das gepackte Programm kann beim Öffnen nicht ausgeführt werden:
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</module></module></module></module></module></module>
Natürlich Der Fehlercode, den ich damals nicht behalten habe, wurde durch eine Versionsinkongruenz verursacht:
Mein Pyinstaller ist 3.2
Die Version von Anfragen muss herabgesetzt werden, Anfragen2 .10 kann eine erfolgreiche Verpackung sein, aber 2.11 funktioniert nicht. Hier werden die zur Lösung dieses Problems verwendeten Anfragen 2.10 veröffentlicht. Ich weiß nicht, ob dieses Problem in Zukunft behoben wird. Ich habe gestern von diesem Käfer geträumt. Als ich heute Morgen aufwachte, war ich so aufgeregt, dass ich es nicht ertragen konnte. Ich hoffe, dass die Fragen, die Ihnen während dieses Prozesses begegnen, hilfreich für Sie sind.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispielcodes zum Packen von .py-Dateien in ausführbare Exe-Dateien in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!