In my application if I import those modules and print them to see the path 
of the module, it points to the packaged folder, but the modules are not 
there, yet it works.

I’m assuming your modules are pure Python (.py suffix - no C extensions or 
DLLs)? Python code doesn’t just get copied into your build folder. It is 
precompiled to .pyc, collected into a big zip archive which then is 
embedded directly into the .exe file. You won’t be able to see it but if 
you build in --onedir mode then navigate inside the output, you’ll find a 
file called base-library.zip. This is also a zip archive of precompiled 
Python code except this one only contains some of the standard library 
(don’t ask me why this one’s separate).

Precompiling and zipping reduces the program size and speeds up 
initialisation just because there are less disk operations involved 
(Windows in particular is slow at handling lots of tiny files). But not 
everything can be lumped into a big zip archive. DLLs, including Python 
extension modules (.pyd) don’t work zipped and have to be copied in as is, 
which is why you will likely see parts of libraries inside your programs 
but nothing ending in .py. Data files, whilst they could sometimes be 
compressed in theory, are also just copied in as is. PyInstaller sets the 
__file__ attribute for Python files to point to where the .py file would 
have gone if it wasn’t put in the fancy zip archive. This way, even though 
__file__ itself doesn’t exist, the path to a data file derived from __file__ 
should, so it’s still possible for most libraries to locate their data 
files using __file__.

-- 
You received this message because you are subscribed to the Google Groups 
"PyInstaller" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to pyinstaller+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pyinstaller/7d2d9ce1-e003-4df6-baeb-7ea0be29f13an%40googlegroups.com.

Reply via email to