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


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

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

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

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

2 54

2 ответа:

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

foobar = __import__("foo-bar")

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

Я знаю, что на этот вопрос уже был дан ответ к удовлетворению спрашивающего, но вот еще один ответ, который я считаю, имеет некоторую заслугу выше использования __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 + только