[Python-checkins] python/dist/src/Modules zipimport.c,NONE,1.1 Setup.dist,1.34,1.35 getpath.c,1.44,1.45
jvr@users.sourceforge.net
jvr@users.sourceforge.net
Mon, 30 Dec 2002 14:08:06 -0800
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv32400/Modules
Modified Files:
Setup.dist getpath.c
Added Files:
zipimport.c
Log Message:
PEP 302 + zipimport:
- new import hooks in import.c, exposed in the sys module
- new module called 'zipimport'
- various changes to allow bootstrapping from zip files
I hope I didn't break the Windows build (or anything else for that
matter), but then again, it's been sitting on sf long enough...
Regarding the latest discussions on python-dev: zipimport sets
pkg.__path__ as specified in PEP 273, and likewise, sys.path item such as
/path/to/Archive.zip/subdir/ are supported again.
--- NEW FILE: zipimport.c ---
#include "Python.h"
#include "structmember.h"
#include "osdefs.h"
#include "marshal.h"
#include "compile.h"
#include <time.h>
#define IS_SOURCE 0x0
#define IS_BYTECODE 0x1
#define IS_PACKAGE 0x2
struct st_zip_searchorder {
char suffix[14];
int type;
};
/* zip_searchorder defines how we search for a module in the Zip
archive: we first search for a package __init__, then for
[...1148 lines suppressed...]
return;
Py_INCREF(ZipImportError);
if (PyModule_AddObject(mod, "ZipImportError",
ZipImportError) < 0)
return;
Py_INCREF(&ZipImporter_Type);
if (PyModule_AddObject(mod, "zipimporter",
(PyObject *)&ZipImporter_Type) < 0)
return;
zip_directory_cache = PyDict_New();
if (zip_directory_cache == NULL)
return;
Py_INCREF(zip_directory_cache);
if (PyModule_AddObject(mod, "_zip_directory_cache",
zip_directory_cache) < 0)
return;
}
Index: Setup.dist
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/Setup.dist,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -d -r1.34 -r1.35
*** Setup.dist 12 Dec 2002 17:37:50 -0000 1.34
--- Setup.dist 30 Dec 2002 22:08:03 -0000 1.35
***************
*** 114,117 ****
--- 114,121 ----
_codecs _codecsmodule.c # access to the builtin codecs and codec registry
+ # The zipimport module is always imported at startup. Having it as a
+ # builtin module avoids some bootstrapping problems and reduces overhead.
+ zipimport zipimport.c
+
# The rest of the modules listed in this file are all commented out by
# default. Usually they can be detected and built as dynamically
Index: getpath.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/getpath.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -C2 -d -r1.44 -r1.45
*** getpath.c 23 Dec 2002 21:03:36 -0000 1.44
--- getpath.c 30 Dec 2002 22:08:03 -0000 1.45
***************
*** 366,369 ****
--- 366,370 ----
char *prog = Py_GetProgramName();
char argv0_path[MAXPATHLEN+1];
+ char zip_path[MAXPATHLEN+1];
int pfound, efound; /* 1 if found; -1 if found build directory */
char *buf;
***************
*** 484,487 ****
--- 485,500 ----
reduce(prefix);
+ strncpy(zip_path, prefix, MAXPATHLEN);
+ if (pfound > 0) { /* Use the reduced prefix returned by Py_GetPrefix() */
+ reduce(zip_path);
+ reduce(zip_path);
+ }
+ else
+ strncpy(zip_path, PREFIX, MAXPATHLEN);
+ joinpath(zip_path, "lib/python00.zip");
+ bufsz = strlen(zip_path); /* Replace "00" with version */
+ zip_path[bufsz - 6] = VERSION[0];
+ zip_path[bufsz - 5] = VERSION[2];
+
if (!(efound = search_for_exec_prefix(argv0_path, home))) {
if (!Py_FrozenFlag)
***************
*** 522,525 ****
--- 535,539 ----
}
+ bufsz += strlen(zip_path) + 1;
bufsz += strlen(exec_prefix) + 1;
***************
*** 541,544 ****
--- 555,562 ----
else
buf[0] = '\0';
+
+ /* Next is the default zip path */
+ strcat(buf, zip_path);
+ strcat(buf, delimiter);
/* Next goes merge of compile-time $PYTHONPATH with