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

Explication détaillée de l'exemple de code pour empaqueter des fichiers .py dans des fichiers exécutables exe en Python

高洛峰
高洛峰original
2017-03-24 16:30:233148parcourir

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 :

Explication détaillée de lexemple de code pour empaqueter des fichiers .py dans des fichiers exécutables exe en Python

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn