Build a bootloader for PyInstaller

Building your own bootloader for PyInstaller is often required to avoid seeing virus scanners (falsely) report your executable as infected. Some anti-virus vendors have included snippets of PyInstaller code in their virus definitions. Look around the internet for “PyInstaller virus” and you will get lots of hits such as here, here, and here. In order to fix such issues for two projects I maintain, NodeMCU PyFlasher and ThingPulse App Fairy, I finally bit the bullet and built my own Windows bootloader for PyInstaller. These are my public mental notes of the steps required.

The main entry point should be the PyInstaller documentation on building bootloaders. For some reason I turned to it only after I had followed some other recipe.

  • Download Build Tools for Visual Studio 2019 from Microsoft.
  • Run the vs_BuildTools.exe downloaded in the previous step.
  • Select “C++ build tools”. Switch to the “Individual components” tab and select “Windows Universal CRT SDK” in the addition to the components already selected.
    Build Tools for Visual Studio
  • Install/upgrade setuptools: $ pip install setuptools --upgrade
  • Remove any PyInstaller installation you might already have: $ pip uninstall PyInstaller
  • Clone the PyInstaller repository from GitHub: $ git clone https://github.com/pyinstaller/pyinstaller
  • Checkout the latest version, 4.2 as of today: $ git checkout v4.2
  • Build the bootloader in its directory: $ cd bootloader && python ./waf distclean all
  • Go back to the PyInstaller root dir and install it: $ cd .. && python setup.py install

Building your own bootloader is no guarantee the executable PyInstaller is considered virus-free. However, it is the best you can do.

Leave a Reply