importing as module when a file has a non-identifier name

I need to reuse a function in a file. The usual way is just to import this file as a module. But what to do if the name is "bad"? The following doesn't work:

import foo-bar as foo_bar

After trials and errors, the desired magic found:

foo_bar = __import__('foo-bar', globals(),  locals(), [], -1)

See Python Documentation for details: in some cases you don't want to use __import__.

The best solution is, obviously, to rename file. But I wanted to find an answer to this importing challenge.

Categories: python