4
votes

A basic missing DLLs question...

I'm trying to use Py2Exe to package my Python program which makes use of wxPython. Py2Exe keeps failing because of missing DLLs but I've got no idea where I could expect to find them. I've tried searching my entire C: drive but couldn't find them anywhere which tells me they're missing, not just unregistered. Googling hasn't helped me locate them either except through dodgy 'install Magical Missing DLL (without crapware we promise ;)' sites.

I'm hoping someone can spot the connection between these DLLs and tell me where they're from. Here are a few - every time I tell Py2Exe to exclude a DLL it says I'm missing a different one and the list seems never-ending:

  • api-ms-win-core-libraryloader-l1-2-1.dll
  • api-ms-win-core-atoms-l1-1-0.dll
  • api-ms-win-core-winrt-error-l1-1-1.dll
  • api-ms-win-core-sidebyside-l1-1-0.dll
  • api-ms-win-core-localization-obsolete-l1-3-0.dll
  • api-ms-win-core-heap-l1-2-0.dll
  • api-ms-win-core-heap-l2-1-0.dll
  • api-ms-win-core-delayload-l1-1-1.dll
  • api-ms-win-core-libraryloader-l1-2-0.dll
  • api-ms-win-core-rtlsupport-l1-2-0.dll
  • api-ms-win-core-shlwapi-obsolete-l1-2-0.dll
  • api-ms-win-security-base-l1-2-0.dll

I'm running Win 10 (upgraded form Win 8.1) and I've got x86 and x64 versions of Microsoft Visual C++ Redistributables 2008, 2010 and 2012 installed.

I did hear mention on a forum of a Direct X issue here - that Direct X should have installed some of these but that was in relation to games and I don't see why I need Direct X for my purposes. My wxPython GUI is very basic.

Update: running 'sfc /scannow' didn't find any issues.

Update: I've also installed both the x86 and x64 versions of Microsoft Visual C++ Redistributables 2015 and Visual Studio 10 Express.

Update: I installed DirectX 11 just in case. Also, it looks like there were a bunch of DLLs in %windir%\SysWOW64\downlevel which weren't found. I added the downlevel directory to my path and it's resolved some of the missing DLLs. I'm busy going through the list to see what's still missing.

Update: Finally managed to get Py2Exe to output a distributable by excluding the DLLs listed above. This article suggests some of them at least should be part of the architecture changes in Win 7 - shouldn't I have them (or their Win 10 equivalents)? Where do they come from and what are the repercussions of excluding those from the Py2Exe operation?

Update: Hans Passant suggested this is a bug in py2exe. However the resulting .exe runs fine on my machine but not on someone else's machine - the error message says the DLL api-ms-win-core-libraryloader-l1-2-1.dll can't be found. I excluded that in my setup.py script so I understand it's not packaged with my .exe. But why can I still run the .exe on MY machine? I searched the whole c: drive for the excluded DLLs but couldn't find them. I think this is more than just a py2exe bug.

1
Turns out excluding the DLLs in the py2exe build lets py2exe do its thing but when I try to run the exe created then the exe looks for those DLLs and doesn't run. Except the exe DOES work on my machine and another with Python and wxPython but NOT on other machines without Python and wxPython. I've searched my whole hard drive for those DLLs - I don't have them.user5860663

1 Answers

-1
votes

Add the Secur32.dll in the dll_excludes list and you will be good to go.