How do I include .dll file in executable using pyinstaller?

David P picture David P · Aug 5, 2016 · Viewed 15.5k times · Source

I want to generate a single executable file from my python script. For this I use pyinstaller. I had issues with mkl libraries because I use numpy in the script.

I used this hook so solve the issue, it worked fine. But it does not work if I copy the single executable file to another directory and execute it. I guess I have to copy the hook also. But I just want to have one single file that I can use at other computers without copying .dll's or the hook.

I also changed the .spec file as described here and added the necessary files to the binaries-variable. That also works as long as the .dll's are in the provided directory for the binaries-variable , but that won't work when I use the executable on a computer that doesn't have these .dll's.

I tried using the --hidden-import= FILENAME option. This also solves the issue, but just when the .dll's are provided somewhere.

What I'm looking for is a possibility to bundle the .dll's into the single executable file so that I have one file that works independently.

Answer

Ilya Davydov picture Ilya Davydov · Aug 15, 2017

When I faced problem described here https://github.com/ContinuumIO/anaconda-issues/issues/443 my workaround was

pyinstaller -F --add-data vcruntime140.dll;. myscript.py

-F - collect into one *.exe file

. - Destination path of dll in exe file

from docs http://pyinstaller.readthedocs.io/en/stable/spec-files.html#adding-data-files