Модуль Python с тире или дефисом (-) в его имени
У меня есть существующий модуль python с тире в его имени, foo-bar.py
изменение имени модуля-это то, чего я предпочел бы избежать, поскольку модуль является общим, и мне пришлось бы преследовать все места, где он используется, чтобы мой особый случай работал.
есть ли способ загрузить модуль, имя которого содержит обычно запрещенный '-'?
(Я понимаю, что это не лучшая практика. Но для этой ситуации я бы предпочел не перепроектировать и протестируйте гораздо больший набор приложений. Кроме того, я не думаю, что мои корпоративные хозяева одобрили бы мое время, чтобы реализовать такое изменение.)
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
+ только