Problema ao construir um script PyQt com py2exe (QtCore)
Pergunta
Eu estou tentando fazer um Olá mundo python executável aplicativo gui simples no Windows usando PyQt. Então eu fiz o arquivo pyqt.py
import sys
from PyQt4.QtGui import *
app = QApplication(sys.argv)
button = QPushButton("Hello World", None)
button.show()
app.exec_()
Eu tentei usar py2exe com o seguinte script setup.py
:
from py2exe.build_exe import py2exe
from distutils.core import setup
setup( console=[{"script": "pyqt.py"}] )
(eu tinha o erro No module named sip
primeiro, mas é resolvido graças à página Py2exeAndPyQt
).
Agora eu tenho o executável e quando eu tentar executá-lo, eu recebo o seguinte erro:
Traceback (most recent call last):
File "pyqt.py", line 2, in <module>
File "PyQt4\QtGui.pyc", line 12, in <module>
File "PyQt4\QtGui.pyc", line 10, in __load
ImportError: No module named QtCore
Como posso corrigir isso? TIA
Solução
Você pode fazer algo como isso, você não precisa de importação *.
py2exe_opciones = {'py2exe': {"includes":["sip"]}}
script = [{"script":"pyqt.py"}]
setup(windows=script,options=py2exe_opciones)
E agora o programa deve funcionar. Eu tive o mesmo erro.
Aqui pode ler mais.
Outras dicas
Adicionar from PyQt4.QtCore import *
para pyqt.py.
Eu não sei por que ele não foi incluído automaticamente, mas eu acho que tem algo a ver com QtCore única sendo usado por QtGui, que é um C ++ lib ... Como, py2exe única detecta automaticamente dependências python ... Então você tem que importá-lo manualmente.
Este é um exemplo
from setuptools import setup
import py2exe
from glob import glob
SETUP_DICT = {
'windows': [{
'script': 'main.py',
}],
'zipfile': 'lib/library.zip',
'data_files': (
('', glob(r'C:\Windows\SYSTEM32\msvcp100.dll')),
('', glob(r'C:\Windows\SYSTEM32\msvcr100.dll')),
),
'options': {
'py2exe': {
'bundle_files': 3,
'includes': ['sip', 'PyQt4.QtCore'],
},
}
}
setup(**SETUP_DICT)