Два разных подмодуля с одинаковым именем в разных сторонних модулях - PullRequest
0 голосов
/ 29 января 2020

Проблема

В моем проекте Python -2.7 необходимо использовать два сторонних модуля, назовем их firstmodule и secondmodule.

Есть два разных подмодуля с одинаковым именем, скажем thesubmodule, один в firstmodule и один в secondmodule.

Есть еще один сторонний модуль, назовем его mainmodule, что означает импорт firstmodule.thesubmodule.

Но когда он пытается импортировать thesubmodule, он заканчивает тем, что импортирует его из secondmodule, и все терпит неудачу, потому что эти два подмодуля имеют одинаковое имя, но они совершенно разные.

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

Код

В терминах кода, когда я пишу следующее в моем проекте:

import mainmodule

, тогда mainmodule пытается выполнить это:

import thesubmodule

, но в итоге он импортирует secondmodule.thesubmodule вместо firstmodule.thesubmodule, а затем выдает такие ошибки:

NameError: name 'blabla' is not defined

(где «blabla» можно найти только в firstmodule.thesubmodule).

Вопрос

Есть ли способ указать при импорте mainmodule, что любая ссылка на thesubmodule относится к firstmodule.thesubmodule?

Дальнейшие наблюдения

Когда я пытаюсь удалить путь secondmodule из PYTHONPATH, тогда thesubmodule корректно импортируется, но Мне нужен secondmodule в моем проекте, поэтому, к сожалению, не импортировать его - не вариант.

Если можно было установить значение c для PYTHONPATH только для этого отдельного импорта, а затем восстановить потом его первоначальное значение, тогда я думаю, что это сработает, но это не кажется легким делом.

«Грязная» попытка?

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

...
import os
...
savePYTHONPATHvalue()
os.system('export PYTHONPATH=somevalue')
import mainmodule
restorePYTHONPATHvalue()
...
...