Maison > Article > développement back-end > Explication détaillée de l'exemple de code pour empaqueter des fichiers .py dans des fichiers exécutables exe en Python
Cet article vous présente principalement les informations pertinentes sur l'empaquetage de fichiers .py dans des fichiers exécutables exe en Python. Je pense qu'il a une certaine valeur de référence pour tous les amis qui en ont besoin. ensemble. Jetez un oeil.
Préface
J'ai récemment créé quelques programmes python simples sur chenilles, j'ai donc voulu créer une fenêtre pour voir l'effet.
Tout d’abord, en ce qui concerne Windows, je n’ai pas eu beaucoup de contacts avec eux auparavant, je vais donc d’abord envisager d’utiliser Qt pour créer une interface utilisateur simple. Ici, nous utilisons le script de robot d'exploration sinanews précédent comme exemple pour créer une fenêtre permettant d'obtenir les titres sina du jour.
Après avoir généré le fichier py, exécutez le fichier py. J'ai juste fait glisser quelques composants dans la fenêtre ici. Le navigateur de texte principal est utilisé pour afficher les sinanews obtenus.
Publier d'abord ma configuration
Téléchargement officiel :
PyQt5-5.2.1 pour Py3 .3 (après avoir installé Python3.3, installez le PyQt correspondant, qui trouvera le répertoire d'installation de Python, pas besoin de changer de répertoire d'installation)
Téléchargement local :
PyQt5-5.2.1 pour Py3.3 (Après avoir installé Python3.3, installez le PyQt correspondant, qui trouvera le répertoire d'installation de Python, pas besoin de changer de répertoire d'installation)
Python3.3 n'a pas pip installé par défaut. Vous devez télécharger get-pip.py et l'exécuter. Il vous indiquera que l'installation est réussie.
L'étape suivante consiste à installer certains composants nécessaires. Pour faciliter l'installation, ajoutez d'abord pip aux variables d'environnement.
Nous pouvons maintenant utiliser la commande pip pour installer le composant.
Publiez d'abord sina_news.py et observez quels composants sont nécessaires.
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)
J'ai trouvé des demandes d'importation, importez BeautifulSoup, alors installons d'abord ces composants
pip install requests pip install BeautifulSoup4
Après avoir collé ce code dans le code de la fenêtre :
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_())
Si tout se passe bien, vous devriez pouvoir voir la fenêtre affichée lorsque vous exécutez x.py en python.
Voici le processus d'empaquetage. L'auteur utilise Pyinstaller ici S'il n'est pas installé, vous devez l'installer :
pip install pyinstaller
Une fois l'installation terminée, cd le chemin cmd. dans le répertoire où se trouve x.py.
Commande de packaging :
Pyinstaller -w x.py
À ce stade, le dossier dist est généré dans x.py et le x.exe empaqueté se trouve sous ce dossier. Double-cliquez sur x.exe pour afficher l'effet :
Bien sûr, il y a de nombreuses améliorations, comme la sélection d'une date ci-dessus et l'obtention des titres de la date spécifiée.
Problèmes possibles :
Le programme emballé ne peut pas être exécuté après son ouverture. Affichage :
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>
Bien sûr. ceci Le code d'erreur, que je n'ai pas conservé à ce moment-là, était dû à une incompatibilité de version :
Mon Pyinstaller est 3.2
La version des requêtes doit être réduite, les requêtes 2.10 peuvent réussir l'emballage, mais la version 2.11 ne fonctionne pas. Voici les requêtes 2.10 utilisées pour résoudre ce problème. Je ne sais pas si ce problème sera résolu à l'avenir. Je rêvais de ce bug hier. Je l'ai résolu en me réveillant ce matin. J'étais tellement excité que je ne pouvais pas le supporter. J'espère que les questions que vous rencontrerez au cours de ce processus vous seront utiles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!