2013-04-21 4 views
4

Моя система:cx_freeze PyQt4 пример (" Samples PyQt4") не работает

для Windows 7, x64, Python 3.3.1, PyQt4 4,10 с помощью программы установки (py3.3-Qt5.0.1-x64) , cx_freeze 4.3.1 (Win-amd64-py3.3)

Что сработало:

  • Перемещение в терминале папку ..python33\lib\site-packages\cx_freeze\samples (и в соответствующий пример-папки) и выполнить python setup.py build

  • Это работало с: \simple и \tkinter (просто чтобы убедиться, что я не заладилось где-то еще)

Проблема:

  • Но моя цель состоит в том, чтобы получить исполняемый файл/пакет моего PyQt4-Project, поэтому я попробовал то же самое с примером \PyQt4 (кстати. PyQt4app.py прекрасно работает как приложение питона)

  • \PyQt4 >>> python setup.py build не работает изначально: Запуск сгенерированных PyQt4app.exe приводит к ошибке, прося недостающего пакета «повторно»

  • Впоследствии я в том числе «ре "в файле setup.py. (options = {"build_exe" : {"includes" : ["atexit", "re"]}})

  • Теперь он генерирует EXE-файл, не бросать ошибку - но работает этот exe-файл ничего, просто молчание не делать ...

  • cx_freeze, кажется, найти правильные зависимости: python33.dll, Qt5Core.dll, Qt5Gui.dll, PyQt4.QtCore.pyd, PyQt4.QtGui.pyd (среди прочего: sip, unicodedata и т. Д.).

Здесь setup.py (без изменения, за исключением "повторно" включены & комментарии удалены)

import sys 

from cx_Freeze import setup, Executable 

base = None 
if sys.platform == "win32": 
    base = "Win32GUI" 

setup(
     name = "simple_PyQt4", 
     version = "0.1", 
     description = "Sample cx_Freeze PyQt4 script", 
     options = {"build_exe" : {"includes" : ["atexit", "re"]}}, 
     executables = [Executable("PyQt4app.py", base = base)]) 

Любые предложения, где я неправильно? Какая дополнительная информация была бы полезной?

  • кстати. - docs.python.org/3/faq ссылки на py2exe - но py2exe не работает с Python 3.x!?

редактировать: мне удалось получить консоль-вывода, установив base = None и запустив exe-файл с помощью пакетного файла. Выход: Failed to load platform plugin "windows". Available platforms are: (конец вывода - нет списка или чего-либо еще).

Итак, где и как загрузить этот плагин?

+0

Параметр 're' проблема должна быть решена [этот запрос тянуть] (https://bitbucket.org/anthony_tuininga/cx_freeze/pull-request/18/ensure-re-module-is-copied-on-python-3). –

ответ

4

Ok - Я нашел обходной путь:

Скопируйте qwindows.dll с его папкой \platforms\qwindow.dll из ..\python33\lib\site-packages\PyQt4\plugins в папку, где находится .exe. Теперь это работает.

редактировать:

Мой setup.py выглядит сейчас, как это, и, кажется, применимы и в других случаях, а также:

import sys 

from cx_Freeze import setup, Executable 

base = "Win32GUI" 
path_platforms = ("..\..\..\PyQt4\plugins\platforms\qwindows.dll", "platforms\qwindows.dll") 
build_options = {"includes" : [ "re", "atexit" ], "include_files" : [ path_platforms ]} 

setup(
    name = "simple_PyQt4", 
    version = "0.1", 
    description = "Sample cx_Freeze PyQt4 script", 
    options = {"build_exe" : build_options}, 
    executables = [Executable("PyQt4app.py", base = base)] 
    ) 
+0

Похоже, что плагины платформ являются новыми с Qt 5. Я зарегистрировал проблему, чтобы обрабатывать их автоматически: https://bitbucket.org/anthony_tuininga/cx_freeze/issue/33/handle-qt-5-platform-plugins –

Смежные вопросы