How do I include .dll file in executable using pyi

2020-06-03 01:49发布

问题:

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.

回答1:

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



回答2:

As the selected answer didn't work for the case of using libportaudio64bit.dll, I put my working solution here.

For me, the working solution is to add _sounddevice_data folder where the .exe file is located then making a portaudio-binaries folder in it and finally putting libportaudio64bit.dll in the recently created folder.

Hope it helps!