139

I have an existing python module with a dash in its name, foo-bar.py

Changing the module name is something I would prefer to avoid as the module is shared, and I would have to chase down all the places it is used so that my special case will work.

Is there a way to load a module whose name contains the typically forbidden '-'?

(I do understand that this isn't a best practice. But for this situation I would prefer not to redesign and test a much larger set of applications. Also I don't think my corporate masters would approve of my taking the time to implement such a change.)

2

2 Answers 2

130

You can do that using __import__(). For example:

foobar = __import__("foo-bar")

But you really should rename the module instead. That way you can avoid confusion where the filename of the module is different from the identifier used in the program.

Sign up to request clarification or add additional context in comments.

Comments

88

I know this question has already been answered to satisfaction of the asker, but here is another answer which I believes has some merit above using __import__().

import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()

According to the docs:

"This provides an implementation of import which is portable to any 
Python interpreter. This also provides an implementation which is 
easier to comprehend than one implemented in a programming language 
other than Python."

Python 2.7 + only

2 Comments

I was searching for how to do this and your answer applies better to my situation than the older answer. It's always good if you see a distinct answer to the already existing one to add it as a new answer so that people in a position like myself can find all the relevant information in one place.
in the python documentation, __import__ is discouraged (see the documentation) in the favor of importlib. it could cause a lot of issues. (see also this post)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.