Python Module с тире или дефис (-) в его имени

У меня есть существующий модуль python с тире в его имени, foo-bar.py

Изменение имени модуля - это то, что я бы предпочел избежать, поскольку модуль является общим, и мне пришлось бы преследовать все места, в которых он используется, чтобы мой специальный случай работал.

Есть ли способ загрузить модуль, чье имя содержит типично запрещенные '-'?

(Я действительно понимаю, что это не лучшая практика, но для этой ситуации я бы предпочел не перепроектировать и протестировать гораздо более широкий набор приложений. Также я не думаю, что мои корпоративные владельцы одобрили бы мою время для осуществления такого изменения.)

Ответ 1

Вы можете сделать это с помощью __import__(). Например:

foobar = __import__("foo-bar")

Но вы действительно должны переименовать модуль. Таким образом, вы можете избежать путаницы, когда имя файла модуля отличается от идентификатора, используемого в программе.

Ответ 2

Я знаю, что этот вопрос уже ответил на удовлетворение искателя, но вот еще один ответ, который, как я полагаю, имеет некоторые достоинства, используя __import__().

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

Согласно документам:

"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