2017-03-19 2 views
0

Je suis en train d'utiliser le py2app construire un paquet d'applications avec PyQt5 et exclut modole inutile, cependant, je reçois toujours le paquet entier PyQt5 dans mon application qui est plus 200Mopy2app ne peut pas exclure le module correctement

from setuptools import setup 

APP = ['browser.py'] 
DATA_FILES = [] 
OPTIONS = {'argv_emulation': True, 'includes': ['PyQt5.QtCore', 'PyQt5.QtGui', 'PyQt5.QtWidgets'], 
     'excludes': ['PyQt5.QtDesigner', 'PyQt5.QtNetwork', 'PyQt5.QtOpenGL', 'PyQt5.QtScript', 'PyQt5.QtSql', 'PyQt5.QtTest','PyQt5.QtXml', 'PyQt5.QtHelp','QtHelp','QtSerialPort','QtHelp.so','PyQt5.QtHelp.so']} 

setup(
app=APP, 
data_files=DATA_FILES, 
options={'py2app': OPTIONS}, 
setup_requires=['py2app'], 

)

et voici browser.py

from PyQt5.QtCore import QUrl 
from PyQt5.QtWidgets import QMainWindow,QApplication 
from PyQt5.QtGui import QIcon 
from PyQt5.QtWebEngineWidgets import QWebEngineView 

import sys 

class MainWindow(QMainWindow): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

     self.setWindowTitle('My Browser') 

     self.setWindowIcon(QIcon('icons/penguin.png')) 
     self.show() 


     self.browser = QWebEngineView() 
     url = 'https://www.google.com/' 

     self.browser.setUrl(QUrl(url)) 

     self.setCentralWidget(self.browser) 


app = QApplication(sys.argv) 

window = MainWindow() 

window.show() 

app.exec_() 

Merci!

Répondre

0

Mise à jour:

Ma façon actuelle est coupé juste le paquet PyQt5 et à gauche que nécessaire. remplacer le PyQt par celui coupé.

0

J'ai rencontré le même problème avec mes projets PyQt5.

La solution que j'utilise est de supprimer des fichiers après que py2app a construit l'application. Dans mon cas, cela économise environ 100MiB.

Vous pouvez voir le code que j'utilise ici:

https://github.com/barry-scott/scm-workbench/blob/master/Kit/macOS/build-app.sh

L'idée de base est d'inclure uniquement les modules PyQt5 répertoriés. Je définis manuellement la liste des modules utilisés.