[Patches] [ python-Patches-483466 ] Import from Zip Archive

noreply@sourceforge.net noreply@sourceforge.net
Fri, 30 Nov 2001 08:41:17 -0800


Patches item #483466, was opened at 2001-11-19 07:46
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=305470&aid=483466&group_id=5470

Category: Core (C code)
Group: Python 2.3
Status: Open
Resolution: None
Priority: 5
Submitted By: James C. Ahlstrom (ahlstromjc)
Assigned to: Nobody/Anonymous (nobody)
Summary: Import from Zip Archive

Initial Comment:
This is the "final" patch to import.c to support
imports from zip archives and directory caching
using os.listdir().  It replaces patch 476047.  It
it intended to be part of Python 2.3.  There are
five files requiring patches, and these are in
context diff's in five separate attached files.

I have tested this on Linux and Windows 2000.  It
needs testing on bigendian machines, and those with
64-bit integers.  Please complain about bugs, but let
me know if you plan to change the code.

The documentation for the imp module needs a patch.
This is added right after "PY_FROZEN":

PY_ZIPFILE
  The module was found in a zip archive file.

BUGS
====
There are a couple of bugs I wasn't sure were worth
fixing.  Please complain if these are a problem:

The use of os.listdir() for normal directory imports
makes case_ok() unnecessary, but it was not removed.
It might be needed if os.listdir() is missing.

There is no problem if os.listdir() doesn't exist,
but if it exists, it must perform as documented,
and must return both file and directory names in their
correct case.

The PYTHONCASEOK flag is ineffective.  This is a
consequence of dictionary name lookup.

----------------------------------------------------------------------

>Comment By: James C. Ahlstrom (ahlstromjc)
Date: 2001-11-30 08:41

Message:
Logged In: YES 
user_id=64929

I added newer file versions to implement the changes 
discussed on python-dev.  I still need to patch import.c to 
properly handle "" and relative paths in sys.path.  The 
current changes are:

1) Creation of sys.path[0] is moved out of PySys_SetArgv() 
and into Py_GetPath().  Creation of the zip path is also 
moved into Py_GetPath(), so that all sys.path's are now in 
Py_GetPath().
2) sys.path[0] is the absolute path of the Python script 
being run.  For "-c" or an interactive interpreter, it 
remains "".

There are two new Python API functions Py_SetScriptName() 
and Py_GetScriptName().  These are similar to the existing 
Py_[GS]etProgramName() functions, and are used for the same 
purpose, namely passing information to Py_GetPath().  All 
these functions are arguably hacks which should be replaced 
with additional arguments to Py_Initialize().  Here is the 
documentation:

char* Py_GetScriptName ()
Return the script name set with Py_SetScriptName(), or NULL. 
The returned string points into static storage; the caller 
should not modify its value. 

void Py_SetScriptName (char *name)
This is similar to Py_SetProgramName(), but tells the 
interpreter the file name of the Python script being run. 
This is used by Py_GetPath() to add the directory of the 
script to sys.path. If name is NULL no script item is added 
to sys.path.  If name is "", the item "" will be added to 
sys.path, and "" means the current directory.  Otherwise the 
absolute directory path will be added.  The argument must 
point to a string in static storage whose contents will not 
change for the duration of the program's execution.

----------------------------------------------------------------------

Comment By: James C. Ahlstrom (ahlstromjc)
Date: 2001-11-20 06:49

Message:
Logged In: YES 
user_id=64929

The zero length string "" is not handled correctly as an 
item of sys.path.  It should mean current directory, but
its contents will not be cached.  What happens if the 
current directory changes?  Should the new directory be 
searched, or only the original current directory?  I will 
submit a further patch.

----------------------------------------------------------------------

You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=305470&aid=483466&group_id=5470