Модуль Python с дефисом или дефисом (-) в названии - PullRequest
70 голосов
/ 28 сентября 2011

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

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

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

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

Ответы [ 2 ]

83 голосов
/ 28 сентября 2011

Вы можете сделать это, используя __import__(). Например:

foobar = __import__("foo-bar")

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

45 голосов
/ 09 июля 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...