Can I Zip All The Python Standard Libs And The Python Still Able To Import It?
Solution 1:
To import modules from a .zip
file, you need to add that file to sys.path
- then it will act as a search directory. The zipimport
module that does the job is a built-in one.
sys.path
is constructed like this:
PYTHONPATH
environment variable + value calculated from a compiled-in default (PYTHONPATH
macro inpyconfig.h
)- The calculated value includes a path to a
.zip
file that may or may not exist.
- The calculated value includes a path to a
- Then
site
is imported that does the following:- looks for and adds user-specific
site-packages
- looks for system-wide
site-packages
directories undersys.prefix
andsys.exec_prefix
.- when calculating both
sys
properties, the interpreter does a number of tests that includes looking foros.py
file andlib-dynload
directory where they should normally be
- when calculating both
- scans the
site-packages
directories for.pth
files and appends their lines tosys.path
, treating them as paths relative to the file's location.
- looks for and adds user-specific
So, you can move all the standard modules into the predefined .zip
file. But you may need to leave an os.py
or lib-dynload
if sys.prefix
and sys.exec_prefix
become blank after that (the contents are irrelevant, the moved modules will be imported from the .zip
because it's earlier on sys.path
), or you will lose access to all 3rd-party modules.
Subdirectories that have their own entry in sys.path
you need to handle separately so that their contents can still be found on sys.path
.
(tested in Python 2.7-win32
)
Though adding .pyc
files to the archive is sufficient, pdb
and stacktraces will be useless unless you place .py
s there as well.
Post a Comment for "Can I Zip All The Python Standard Libs And The Python Still Able To Import It?"