[Python-Dev] how to find the file path to an extension module at init time? (original) (raw)

Stefan Behnel stefan_ml at behnel.de
Sun Nov 13 20:31:01 CET 2011


Hi,

in Python modules, the "file" attribute is provided by the runtime before executing the module body. For extension modules, it is set only after executing the init function. I wonder if there's any way to figure out where an extension module is currently being loaded from. The _PyImport_LoadDynamicModule() function obviously knows it, but it does not pass that information on into the module init function.

I'm asking specifically because I'd like to properly implement file in Cython modules at module init time. There are cases where it could be faked (when compiling modules on the fly during import), but in general, it's not known at compile time where a module will get installed and run from, so I currently don't see how to do it without dedicated runtime support. That's rather unfortunate, because it's not so uncommon for packages to look up bundled data files relative to their own position using file, and that is pretty much always done in module level code.

Another problem is that package local imports from init.py no longer work when it's compiled, likely because path is missing on the new born module object in sys.modules. Here, it would also help if the path to the module (and to its package) was known early enough.

Any ideas how this could currently be achieved? Or could this become a new feature in the future?

Stefan



More information about the Python-Dev mailing list