Re: Loading Resources From a Python Module/Package
PJ Eby <[email protected]> Sat, 31 Jan 2015 12:54:01 -0500
| Newsgroups | gmane.comp.python.import |
|---|---|
| Message-ID | <CALeMXf6Ks+De-eg3e6xwaw29o7JumUE3G4+0+cCMK+rb=KW1PQ@mail.gmail.com> |
On Sat, Jan 31, 2015 at 10:38 AM, Paul Moore <[email protected]> wrote: > At the moment, pkg_resources fills in the gap, but that's not > integrated with the loader system. Actually, it is. There's basically a generic function that adapts loaders to "resource providers". In a trivial case, a loader can simply implement the resource provider interface directly, and register 'lambda self: self' as the adapter function. I suggest taking a look at the IResourceProvider class, and seeing whether you want to change anything in how the interface or implementation work. You could in fact create ABCs based on the pkg_resources implementation. The real question is whether there are any lessons to be learned from pkg_resources' usage history. I think the idea of temp files may be a good one, though there will still be no real cleanup possible in the case of e.g. C extensions. You'll have to rely on whatever system facility exists for temporary file cleanup. With historical hindsight, I'd say that I should've made it temp by default, with the option to set a persistent cache, because a common complaint is that processes running as special users often can't write to their home directory (e.g. web servers running as "nobody"). Apart from that, the implementations in pkg_resources can mostly be pulled for reuse, as well as the interfaces, and I'd suggest doing exactly that. There are a lot of non-obvious gotchas dealing with zipfiles, and the implementation is fairly battle-hardened at this point.