Search code examples
pythonpyinstallerpycrypto

Script made compiled with pyinstaller DLL load fail


I have compiled a script with pyinstaller and it compiles fine but when I run the program I get the following error in the console window.

ImportError: DLL load failed: The specified module could not be found.

I am trying to import Crypto when I get this error. Why does this happen and how can I fix it?


Solution

  • According to the pyinstaller manual:

    You can verify that hidden import is the problem by using Python's verbose imports flag. If the import messages say "module not found", but the warnproject.txt file has no "no module named..." message for the same module, then the problem is a hidden import.

    Hidden imports are handled by hooking the module (the one doing the hidden imports) at Analysis time. Do this as follows:

    1. Create a file named hook-module.py (where module is the fully-qualified Python name, eg, hook-xml.dom.py) and place it somewhere. Remember the place as your private hooks directory.

    2. In the .spec file, pass your private hooks directory as hookspath argument to Analysis so will be searched. Example:

      a = Analysis(['myscript.py'], hookspath='/my/priv/hooks') In most cases the hook module will have only one line:

      hiddenimports = ['module1', 'module2'] When the Analysis finds this file, it will proceed exactly as though the module explicitly imported module1 and module2.

    This question seems related, the answers might also be useful for you.

    Finally, this report seems to contain a similar problem. The user seemingly was able to fix it by updating to pyinstaller 2.1, so you might want to give that a try if you haven't already.