(relative) import trouble, sometimes it works, sometimes it doesn't ...
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Mon Oct 20 21:26:23 EDT 2008
En Sat, 18 Oct 2008 05:52:04 -0300, Stef Mientki <stef.mientki at gmail.com>
escribió:
> I'm running Python 2.5 and want my programs to run at least under
> Windows and Linux (preferable also Mac).
> So I guess I should always use relative paths.
>
> From most modules I can call a global function,
> that should import a dictionary from path deeper than the module itself.
> The import is done in the global function.
> In that global function, I get the modules path by
>
> SourceFile = sys._getframe(1).f_code.co_filename
Why don't you let the caller tell you its own location, using __file__?
The above code is too much magic for me.
> now to be sure to succeed the import (at least I was thinking this would
> always be successful :-(
> I need to
> 1- add the path of the module to be imported to sys.path
> (or do a dot import)
Yes.
> 2- keep track of already done imports, to give a reload the next time
> (or maybe always do an import followed by an reload ?)
A reload is only required if the module was changed on disk and you want
to get the later version.
> Now what I don't understand is what relative path should I use in 1:
> - relative to the main application
> - relative to the working directory were I started the application
> - relative to the current working directory
> - relative to the module that is doing the import
> - relative to the module that called the global function
Relative imports assume you are inside a *package*, and they're relative
to the current module location, each dot being one level above. See
http://www.python.org/dev/peps/pep-0328/
> I would be pleased if someone could enlighten me,
> because this information is hard to find.
Yes. How import works is very poorly documented, unfortunately. You'll
have to dig into the various PEPs and the bug tracker.
--
Gabriel Genellina
More information about the Python-list
mailing list