Проблема
В моем проекте 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()
...