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

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top