tutorial tuple make indexerror index from create compile python pyqt exe pyside py2exe

python - tuple - pyinstaller



Error de ruta del sistema con PyQt y Py2exe (4)

Mi problema:

Tengo este problema donde si trato de ejecutar py2exe en mi archivo python que usa Pyqt / Pyside, aparece el siguiente error cuando intento ejecutar el EXE generado en I: / Documents / Python / Buttonio_Testio / dist:

Error recibido al ejecutar Package.exe:

I:/Documents/Python/Buttonio_Testio/dist>Package.exe Traceback (most recent call last): File "Package.py", line 1, in <module> File "PySide/__init__.pyc", line 55, in <module> File "PySide/__init__.pyc", line 11, in _setupQtDirectories File "PySide/_utils.pyc", line 87, in get_pyside_dir File "PySide/_utils.pyc", line 83, in _get_win32_case_sensitive_name File "PySide/_utils.pyc", line 58, in _get_win32_short_name WindowsError: [Error 3] The system cannot find the path specified.

Mi setup.py se ve así:

from distutils.core import setup import py2exe setup(console=[''Package.py'']) My program, in Package.py looks like this: from PySide.QtCore import * from PySide.QtGui import * import sys import Gui class Ui_Dialog(QDialog, Gui.Ui_Dialog): #Setupui and function afterwards generated converting XML file made by QT Desiner to python. def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(279, 295) self.textBrowser = QtGui.QTextBrowser(Dialog) self.textBrowser.setGeometry(QtCore.QRect(10, 10, 256, 192)) self.textBrowser.setObjectName("textBrowser") self.pushButton = QtGui.QPushButton(Dialog) self.pushButton.setGeometry(QtCore.QRect(10, 210, 251, 71)) self.pushButton.setObjectName("PushButton") self.retranslateUi(Dialog) QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.textBrowser.clear) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) self.pushButton.setText(QtGui.QApplication.translate("Dialog", "Clear Spam", None, QtGui.QApplication.UnicodeUTF8)) def __init__(self, parent=None): super(Ui_Dialog, self).__init__(parent) self.setupUi(self) self.spam() def spam(self): self.textBrowser.append("SPAM") self.textBrowser.append("SPAM") self.textBrowser.append("SPAM") self.textBrowser.append("LOL") self.textBrowser.append("I") self.textBrowser.append("AM") self.textBrowser.append("SPAMMING") self.textBrowser.append("MYSELF") app = QApplication(sys.argv) form = Ui_Dialog() form.show() app.exec_()

Estoy ejecutando Windows 8 con 32 bits python y módulos de 32 bits instalados. El archivo setup.py estaba en la misma carpeta que Package.py cuando ejecuté setup.py en Símbolo del sistema. Además de eso, no sé qué otra información puede ayudar a solucionar mi problema.

Eso es todo, gracias por cualquier respuesta de antemano.


Estaba buscando desesperadamente una solución para esto durante las últimas tres horas. Terminé yendo al archivo _ _ init_ _.py en el directorio C: / Python27 / Lib / site-packages / PySide. Cambié la última línea a lo siguiente:

try: _setupQtDirectories() except WindowsError: pass

Es feo, lo admito. Espero que la gente de PySide solucione esto pronto.


El problema fue que _utils.py usó __file__ , pero __file__ no está disponible en ejecutables congelados. Esto se ha corregido en PySide 1.2.1 que se lanzó hace unos días (fue corregido por commit 817a5c9bd39d3a22e2a7db9aa497059be57d58d7 ).


Intenté instalar PySide 1.2.1 y todavía tengo este problema.

Acabo de cambiar las funciones get_pyside_dir() en PySide._utils para devolver mi ruta a pyside, que para mí es "C: / Python27 / Lib / site-packages / PySide"


para PySide 1.2.1: arregle la función get_pyside_dir() en PySide / _utils.py:

if sys.platform == ''win32'': ... def get_pyside_dir(): is_frozen = hasattr(sys, ''frozen'') try: from . import QtCore except ImportError: s1 = sys.argv[0] if is_frozen else __file__ return _get_win32_case_sensitive_name(os.path.abspath(os.path.dirname(s1))) else: s2 = sys.argv[0] if is_frozen else QtCore.__file__ return _get_win32_case_sensitive_name(os.path.abspath(os.path.dirname(s2))) else: def get_pyside_dir(): is_frozen = hasattr(sys, ''frozen'') try: from . import QtCore except ImportError: s1 = sys.argv[0] if is_frozen else __file__ return os.path.abspath(os.path.dirname(s1)) else: s2 = sys.argv[0] if is_frozen else QtCore.__file__ return os.path.abspath(os.path.dirname(s2))

Al usar py2exe u otro "congelador", el valor de _utils.py en _utils.py apuntará al archivo dentro del archivo zip, que obviamente PySide no espera. Así que tienes que manejar este caso y forzar _utils.py a usar una ruta, donde PySide dlls y demás cosas están realmente vivos (en mi caso, un directorio, donde se coloca el archivo .exe).