У меня есть существующий модуль python с тире в его имени, foo-bar.py
Я бы предпочел избежать изменения имени модуля, поскольку модуль является общим, и мне пришлось бы искать все места, где он используется, чтобы мой особый случай работал.
Есть ли способ загрузить модуль, имя которого содержит обычно запрещенный знак '-'?
(Я понимаю, что это не лучшая практика. Но в этой ситуации я бы предпочел не перепроектировать и не тестировать гораздо больший набор приложений. Кроме того, я не думаю, что мои корпоративные мастера одобрили бы мое время на внедрение такое изменение.)
foo-bar
s наfoobar
что-то еще? Насколько это сложно?Ответы:
Вы можете сделать это с помощью
__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
+ толькоисточник
Попробуйте использовать подчеркивание вместо дефиса.
импортировать pymysql_utils
работал у меня, хотя import pymysql-utils был именем модуля, используемого pip
источник