К сожалению, это взлом sys.path, но он работает довольно хорошо.
Я столкнулся с этой проблемой в другом слое: у меня уже был модуль с указанным именем, но это был неправильный модуль.
я хотел сделать следующее (модуль, из которого я работал, был module3):
mymodule\
__init__.py
mymodule1\
__init__.py
mymodule1_1
mymodule2\
__init__.py
mymodule2_1
import mymodule.mymodule1.mymodule1_1
Обратите внимание, что я уже установил mymodule, но в моей установке у меня нет "mymodule1"
и я получу ImportError, потому что он пытается импортировать из моих установленных модулей.
Я пытался создать sys.path.append, но это не сработало. То, что сработало, было sys.path.insert
if __name__ == '__main__':
sys.path.insert(0, '../..')
Так что вроде хак, но заставил все это работать!
Так что имейте в виду, что если вы хотите, чтобы ваше решение переопределило другие пути , вам нужно использовать sys.path.insert (0, pathname), чтобы оно заработало! Для меня это было очень неприятным камнем преткновения, многие говорят, что используют функцию «добавить» в sys.path, но это не работает, если у вас уже есть определенный модуль (я нахожу это очень странным поведением)