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