Inside Out

Notes on seeking wisdom and crafting software

PyQt5 install by archive extraction

We assume you’re trying to build a python qt app on a dev box or a build machine (for a CI setup). You need to install PyQt5 for various reasons including running tests or freezing the setup build.

There are two problem this post will help you solve:

  • Slow downloads of PyQt5
  • Installation of PyQt5 on the box

My experience with sourceforge.net’s download service has not been very good. They are slow and redirect from one mirror to another which confuses downloaders. MirrorService is a great alternative to sf.net downloads. Here’s the link to PyQt5 5.5:

https://www.mirrorservice.org/sites/downloads.sourceforge.net/p/py/pyqt/PyQt5/PyQt-5.5/PyQt5-5.5-gpl-Py3.4-Qt5.5.0-x32.exe -FileName $env:temp/pyqt5_install.exe

Onto the second part. PyQt5 installer is based on the NSIS installation scripts. For some reason, the installer didn’t run for me in CI machine. Here’s the alternate way to install PyQt5 (in powershell):

  > cinst 7zip.commandline
  > c:\programdata\chocolatey\bin\7z.exe x $env:temp\pyqt5_install.exe -oC:\\Python34 -r
  > ls -name "C:\\Python34\\Lib\\site-packages"
  > ls -name "C:\\Python34\\Lib\\site-packages\\PyQt5"
  > Set-Content -Path "C:\\Python34\\Lib\\site-packages\\PyQt5\\pyuic5.bat" -Value "C:\\Python34\\python.exe -m PyQt5.uic.pyuic %1 %2 %3 %4 %5 %6 %7 %8 %9"
  > Get-Content "C:\\Python34\\Lib\\site-packages\\PyQt5\\pyuic5.bat"

We use 7zip version 9.30 or up, which can extract NSIS packages. Older versions will extract the files into a different folder structure like $_OUTDIR etc. and require to move the files again :( We need to extract the files to C:\\Python34 directory preserving the folder structure, so the PyQt5 module ends up in Lib\site-packages\PyQt5.

Last trick is to create a pyuic5.bat file since we’re hacking the installation process (it’d autogenerate for regular installation scenarios).

Complete example is available in the appveyor.yml we’re using for pomito: here.