[Python-Dev] how to find the file path to an extension module at init time?
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