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

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

import checkdmarc

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

1 голос
/ 21 апреля 2019

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

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

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

...