zipimport (.pyd & .so) files.

Thomas Jollans thomas at jollans.com
Fri Jul 9 13:48:53 EDT 2010


On 07/09/2010 06:36 PM, King wrote:
> Hi,
> 
> The 'zipimport' modules can only import (.py & .pyc) files from a zip
> file and doesn't support importing .pyd & .so files. Recently I was
> examining the code of Py2Exe (python package deployment tool) and I
> have found that it is using a module 'zipextimporter' that can import
> dlls(.pyd) modules from a zip file.
> It is based on the concept of loading library form memory. You can
> find out more about here:
> http://www.joachim-bauch.de/tutorials/loading-a-dll-from-memory/
> 
> It's strictly for windows platform. I would like to know from expert
> python users and linux programmers, how we can achieve similar
> functionality on linux platform? I do have limited c/c++ skill sets
> but I would love to give a try.

I don't think it's possible as such:

On UNIX systems, dynamic module loading is done with the dl* functions
in libdl. From the manual installed on my machine:


       void *dlopen(const char *filename, int flag);

       char *dlerror(void);

       void *dlsym(void *handle, const char *symbol);

       int dlclose(void *handle);

       Link with -ldl.

dlopen() takes a file name. It is, as far as I know, the only, or at
least the only portable way to load a shared object.

There might be some way to load so's from memory on certain Unices, but
these would only work on one system (and I doubt they exist anyway)

So you'd have to extract the file, and make it available through the
file system. This would typically mean creating a file under /tmp (or
possibly under $HOME/.cache/...)

Cheers
Thomas


> 
> Cheers
> 
> Prashant
> 




More information about the Python-list mailing list