python

Мобильный PyQt5

  • воскресенье, 12 апреля 2015 г. в 02:10:47
http://habrahabr.ru/post/255541/

У Python, установленного (а точнее просто распакованного из msi) на флэшку, есть как плюсы, так и минусы, один из последних — некоторые модули, как, например, PyQt. На вкус и цвет, а фломастеры, как говорится, у всех разные, так что если кто-то предпочитает wxPython, тому и флаг в руки. Лично мне нравится PyQt, а вот как его развернуть на флэшке — другой вопрос. Первое, что приходит на ум — собрать из исходников, что накладно по времени, а значит критично в плане если библиотека нужна уже вот-вот. Остается NSIS'ьный инсталлятор, который, во-первых, лапает реестр за интимные места вроде HKEY_CURRENT_USER\Environment, во-вторых, что логично, должен будет создать деинсталлятор (NSIS'ька обычно создает деинсталляторы в папке с приложением, но все же закладываться на это не стоит), — оно нам надо?

В Far есть замечательный плагин arclite, позволяющий просматривать содержание не только архивов, но и некоторых типов инсталляторов, среди которых есть и NSIS'ька. Если открыть инсталлятор PyQt arclite'ом, нашему взору предстанет примерно такая картина.

..
$PLUGINSDIR
Lib
[LICENSE].txt
[NSIS].nsi

Названия говорят сами за себя, так что шагаем в Lib.

..
site-packages

Папка с таким же названием есть в %PYTHON%\Lib. Собственно, все (или почти все), что нам нужно — распаковать папку Lib из инсталлятора в папку %PYTHON%. После распаковки, чтобы все заработало, нужно сделать пару кульбитов вокруг собственной оси, а точнее в папке %PYTHON%\Lib\site-packages\PyQt5 создать файл qt.conf следующего содержания:

[Path]
Prefix = .
Binaries = .

В папке %PYTHON% также нужно создать qt.conf, но с несколько отличным от предыдущего содержимым:

[Path]
Prefix = Lib/site-packages/PyQt5
Binaries = Lib/site-packages/PyQt5

Остается проверить на работоспособность.

>>> from sys import argv, exit
>>> from PyQt5.QtWidgets import QApplication, QWidget
>>> app = QApplication(argv)
>>> win = QWidget()
>>> win.resize(300, 200)
>>> win.setWindowTitle('Test')
>>> win.show()
>>> exit()

Такие вот коврижки.