Armin Rigo wrote:
import neatTricks in "/home/guido/lib/python" # no package import package.module in "/home/guido/lib/python" # package import foo in "." # relative import from neatTricks in "../cmds" import a, b, c s=os.path.join("some", "where"); import foo in s # expression path
where the semantics would be to search sys.path if and only if no 'in' clause is specified. ('in' doesn't sound quite right...)
Thinking about the semantics of the above, including corner cases, I find myself wanting to make the semantics of:
<some_kind_of_import_statement> in "<path>"
to be equivalent to:
sys.path.insert(0, "<path>") <some_kind_of_import_statement> del sys.path # assuming the import doesn't modify sys.path
That doesn't seem to be quite equivalent to what you've proposed. On the other hand, that seems to provide at least semi-reasonable answers to questions about what happens to sys.modules, what happens if sys.modules['package'] is defined when importing package.module, what's the correct search path when a module being imported does an import, etc.
Having said that, that makes me feel negatively about the proposal, since you could do it yourself directly.