You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
With the introduction of zipimport I experimented to
determine how much of the standard library could be
provided in zip format.
I discovered that I could entirely remove the standard
library, replacing it with /lib/python24.zip, with the
following caveats (this is under Cygwin, where /usr/lib
appears to be a loopback mount of /lib: paths will
differ on other platforms):
The /lib/python2.4/lib-dynload directory had to be
copied to the /lib directory to make zlib available to
zipimport;
The interpreter now produced three error messages:
"Could not find platform independent libraries <prefix>"
"Could not find platform dependent libraries <exec_prefix>"
"Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]"
With the move towards esoteric import mechanisms it
seems that the searches for os.py in the filesystem
might no longer be an appropriate way to start
executing the interpreter.
Should some import hook API be available to determine
whether standard libraries are available without
actually importing anything?
Personally I think it's just as relevant as it always was, particularly with the introduction of importlib, but Brett will have a more informed opinion. I won't be surprised if this issue is closed as wontfix.
Yeah, I'm pretty sure the bootstrap mechanism needs to be able to get hold of os.py directly so it can be injected into the importlib._bootstrap namespace.
However, it may be worth figuring out and documenting the bare minimum that has to exist on the filesystem in order for importlib to get going.
It's even possible that Brett freezes enough into the interpreter binary that the required set has shrunk to zero.
Importlib actually requires no files from disk; everything that is required for importlib are built-in modules or are constants in importlib itself (e.g. os.sep). So technically this should be doable since my bootstrap work freezes importlib itself.
BreamoreBoy commented on Jul 9, 2014
BreamoreBoymannequin
Mannequin
More actions
Is this something that we could get into 3.5?
iselind commented on Dec 24, 2016
iselindmannequin
Mannequin
More actions
How much smaller would the stdlib for 3.5 become if you compress it with zip?
iselind commented on Dec 24, 2016
iselindmannequin
Mannequin
More actions
What about the performance penalty for zipping stdlib? is it significant?
When would you like to zip stdlib? For embedded systems with limited disk
space?
Originally zip file importing was faster than standard importing from disk because of the fewer stat calls, but importlib caches such things so I don't know if it's still beneficial. As for space savings, I have no idea; you can try zipping the files yourself to find out the space savings.
iselind commented on Dec 25, 2016
iselindmannequin
Mannequin
More actions
Is it enough to include everything in the Lib folder, excluding
__pycache__, site-packages and the test folder in Lib? Would that be
representative enough?
Patrik Iselind
Den 2016-12-25 kl. 17:31, skrev Brett Cannon:
Brett Cannon added the comment:
Originally zip file importing was faster than standard importing from disk because of the fewer stat calls, but importlib caches such things so I don't know if it's still beneficial. As for space savings, I have no idea; you can try zipping the files yourself to find out the space savings.
Don't forget that the built-in modules may need to be available before the
zipimporter is. A long time ago (when sys.metapath was introduced) I
experimented with imports from non-filesystem sources and that hit me until
I realised what was going on.
Is it enough to include everything in the Lib folder, excluding
__pycache__, site-packages and the test folder in Lib? Would that be
representative enough?
Patrik Iselind
Den 2016-12-25 kl. 17:31, skrev Brett Cannon:
> Brett Cannon added the comment:
>
> Originally zip file importing was faster than standard importing from
disk because of the fewer stat calls, but importlib caches such things so I
don't know if it's still beneficial. As for space savings, I have no idea;
you can try zipping the files yourself to find out the space savings.
>
> ----------
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <http://bugs.python.org/issue1116520\>
> _______________________________________
The 2005 symptom is gone at tip — re-verified today: a zipped stdlib alongside lib-dynload (the report's setup) now starts with zero warnings.
What changed:pythonXY.zip became a prefix landmark on POSIX in 3.11 (bpo-45582: Port getpath[p].c to Python #29041 — generalizing the Windows sentinel noted above in 2016), so the zip itself anchors the search.
The original questions have answers now: checking whether a stdlib module is available without executing it is importlib.util.find_spec() (plus sys.stdlib_module_names for the canonical list), and the landmark mechanism itself is documented in the sys.path initialization docs these days.
So this looks resolved in practice by later work — suggest closing.
Activity
holdenweb commentedon Feb 4, 2005
With the introduction of zipimport I experimented to
determine how much of the standard library could be
provided in zip format.
I discovered that I could entirely remove the standard
library, replacing it with /lib/python24.zip, with the
following caveats (this is under Cygwin, where /usr/lib
appears to be a loopback mount of /lib: paths will
differ on other platforms):
The /lib/python2.4/lib-dynload directory had to be
copied to the /lib directory to make zlib available to
zipimport;
The interpreter now produced three error messages:
"Could not find platform independent libraries <prefix>"
"Could not find platform dependent libraries <exec_prefix>"
"Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]"
With the move towards esoteric import mechanisms it
seems that the searches for os.py in the filesystem
might no longer be an appropriate way to start
executing the interpreter.
Should some import hook API be available to determine
whether standard libraries are available without
actually importing anything?
terryjreedy commentedon Aug 9, 2010
Is this request still relevant for 3.2?
holdenweb commentedon Aug 9, 2010
Personally I think it's just as relevant as it always was, particularly with the introduction of importlib, but Brett will have a more informed opinion. I won't be surprised if this issue is closed as wontfix.
ncoghlan commentedon Feb 26, 2012
Yeah, I'm pretty sure the bootstrap mechanism needs to be able to get hold of os.py directly so it can be injected into the importlib._bootstrap namespace.
However, it may be worth figuring out and documenting the bare minimum that has to exist on the filesystem in order for importlib to get going.
It's even possible that Brett freezes enough into the interpreter binary that the required set has shrunk to zero.
brettcannon commentedon Feb 26, 2012
Importlib actually requires no files from disk; everything that is required for importlib are built-in modules or are constants in importlib itself (e.g. os.sep). So technically this should be doable since my bootstrap work freezes importlib itself.
BreamoreBoy commentedon Jul 9, 2014
Is this something that we could get into 3.5?
iselind commentedon Dec 24, 2016
How much smaller would the stdlib for 3.5 become if you compress it with zip?
iselind commentedon Dec 24, 2016
What about the performance penalty for zipping stdlib? is it significant?
When would you like to zip stdlib? For embedded systems with limited disk
space?
Patrik Iselind
On Sat, Dec 24, 2016 at 6:34 PM, Patrik Iselind <report@bugs.python.org>
wrote:
brettcannon commentedon Dec 25, 2016
Originally zip file importing was faster than standard importing from disk because of the fewer stat calls, but importlib caches such things so I don't know if it's still beneficial. As for space savings, I have no idea; you can try zipping the files yourself to find out the space savings.
iselind commentedon Dec 25, 2016
Is it enough to include everything in the Lib folder, excluding
__pycache__, site-packages and the test folder in Lib? Would that be
representative enough?
Patrik Iselind
Den 2016-12-25 kl. 17:31, skrev Brett Cannon:
holdenweb commentedon Dec 25, 2016
Don't forget that the built-in modules may need to be available before the
zipimporter is. A long time ago (when sys.metapath was introduced) I
experimented with imports from non-filesystem sources and that hit me until
I realised what was going on.
S
Steve Holden
On Sun, Dec 25, 2016 at 5:48 PM, Patrik Iselind <report@bugs.python.org>
wrote:
ncoghlan commentedon Dec 26, 2016
Note that Steve Dower made some significant changes to sys.path initialisation on Windows in Python 3.6 that could potentially be generalised to other platforms: https://docs.python.org/3/using/windows.html#finding-modules
(There's nothing inherently Windows specific about them, they're mainly useful for the case of embedding CPython inside a larger application)
One of those was to allow pythonXY.zip to be used as a sentinel indicating the location of PYTHONHOME.
soreavis commentedon Jul 19, 2026
The 2005 symptom is gone at tip — re-verified today: a zipped stdlib alongside
lib-dynload(the report's setup) now starts with zero warnings.pythonXY.zipbecame a prefix landmark on POSIX in 3.11 (bpo-45582: Port getpath[p].c to Python #29041 — generalizing the Windows sentinel noted above in 2016), so the zip itself anchors the search.lib-dynloadmissing) is deliberate — revisited in the March 2026 path-config work (GH-145273: don't skip missing platstdlib warning if stdlib_zip is found #145544) — and can be silenced with-X pathconfig_warnings=0(new in 3.15, GH-145275: add -X pathconfig_warnings and PYTHON_PATHCONFIG_WARNINGS #145277).importlib.util.find_spec()(plussys.stdlib_module_namesfor the canonical list), and the landmark mechanism itself is documented in the sys.path initialization docs these days.So this looks resolved in practice by later work — suggest closing.
brettcannon commentedon Jul 20, 2026
@soreavis thanks for checking!
soreavis commentedon Jul 20, 2026
Glad I could help