Переключение между относительным и абсолютным импортом встроенного модуля

#python #python-3.x #python-import

#python #python-3.x #python-импорт

Вопрос:

Итак, у меня есть скрипт, который импортирует стандартный модуль checkmarc.

 import checkdmarc
  

Я хочу реализовать некоторую фиктивную галочку, которая будет располагаться в том же каталоге, что и скрипт.
Теперь когда-нибудь он будет там, и я хочу, чтобы скрипт извлек этот локальный модуль, и если его там нет, он должен принять стандартную галочку.
Я знаю, что могу сделать что-то вроде, если файл в пути существует, он примет это, иначе сделайте это, но я хочу сохранить только строку импорта import checkmarc .

Из чтения: https://docs.python.org/3/whatsnew/2.5.html#pep-328-absolute-and-relative-imports там есть раздел именно того, что мне нужно, но только для Python 2.4 и ниже:

В Python 2.4 и более ранних версиях сначала выполняется поиск в каталоге пакета для выполнения относительного импорта, находит pkg/string.py , импортирует содержимое этого файла как модуль pkg.string, и этот модуль привязан к строке имени в пространстве имен модуля pkg.main.

Если есть элегантный способ сделать это, я хотел бы услышать.

Ответ №1:

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

 try:
    import customcheckdmarc as checkdmarc
except ImportError:
    import checkdmarc as checkdmarc
  

это загрузит ваш customecheckedmarc.py если он есть и в противном случае загрузит checkdmarc по умолчанию.