Python module with a dash, or hyphen (-) in its name

71,259

Solution 1

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.

Solution 2

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

Share:
71,259

Related videos on Youtube

Skip Huffman
Author by

Skip Huffman

I am a Senior Software Engineer in Test. Or maybe a Senior Software Developer in Test. Perhaps a Senior Developer in Test. Could it be a Senior Software Development Engineer in Test. Argh. I build robots in software to break other software. In the computer industry since 1989. Mostly QA, Customer Support, and Documentation. Secondary programmer. I have worked extensively with Forth, Rexx, Perl, and for the past few years, Python.

Updated on July 08, 2022

Comments

  • Skip Huffman
    Skip Huffman 11 months

    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.)

  • Skip Huffman
    Skip Huffman over 11 years
    Thanks. I do understand that conventions should be followed wherever practical. I will be bringing up this specific issue during a departmental code review.
  • Davy M
    Davy M over 5 years
    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.
  • XxJames07-
    XxJames07- about 1 year
    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)

Related