[Distutils] How to handle launcher script importability?

Thomas Heller theller at ctypes.org
Tue Aug 20 18:39:27 CEST 2013


Am 20.08.2013 18:22, schrieb Nick Coghlan:
>
> On 20 Aug 2013 09:18, "Thomas Heller" <theller at ctypes.org
> <mailto:theller at ctypes.org>> wrote:
>  >
>  > Am 20.08.2013 15:42, schrieb Nick Coghlan:
>  >
>  >> Importing C extensions requires extracting them to a temp directory and
>  >> loading them from there. Trivial in Python, a pain in C. zipimport is
>  >> currently still written in C.
>  >
>  >
>  > So what - zipimport is a builtin module (on Windows at least).
>
> Huh? That's irrelevant to the fact that doing the tempdir creation, file
> extraction and subsequent import entirely in C code would be painfully
> tedious.

Ok, now I understand.  But the zipfile could contain a loader-module
for each extension which does something like this (this example extracts
and loads 'bz2.pyd'):

def __load():
     import imp, os
     path = os.path.join(__loader__.archive, "--EXTENSIONS--", 'bz2.pyd')
     data = __loader__.get_data(path)
     dstpath = os.path.join(TEMPDIR, 'bz2.pyd')
     with open(dstpath, "wb") as dll:
         dll.write(data)
     imp.load_dynamic(__name__, dstpath)
__load()
del __load

(py2exe for Python 3, which is work in progress, uses this approach)

Thomas



More information about the Distutils-SIG mailing list