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
foo_bar.callme()

After trials and errors, the desired magic found:


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

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.

Vibe code with your voice

Stop fighting speech recognition.
Just talk → fix mistakes later

"... _brings_ hello world"   ❌
          ↓
"... _prints_ hello world"   ✅

Get handsfree.vc on Google Play

Categories: python

Updated: