Импорт модуля с пользовательским поиском

У меня есть некоторые проблемы со структурой моего проекта.
По историческим причинам проект выглядит так:

Source/
    __init__.py
    module1/
        __init__.py
        script1.py
    module2/
        __init__.py
        script2.py

и в производстве он развертывается так

server/
    __init__.py
    module1/
        __init__.py
        script1.py
    module2/
        __init__.py
        script2.py

Проблема в том, что script2.py имеет такой импорт:

from server.module1.script1 import something

Можно ли сказать Python для поиска server.*** не в server/*** но в Source/***?

Прямо сейчас я сделал это с символическими ссылками, но это выглядит некрасиво

1 ответ

Решение

Вы всегда можете добавить ключи к sys.modules толковый словарь; они действуют как псевдонимы для модуля:

import sys

try:
    import server
except ImportError:
    import Source
    sys.modules['server'] = Source

однажды server это запись в sys.modulesлюбые субмодули и пакеты будут найдены, а также server запись будет использоваться в качестве отправной точки для дальнейшего импорта.

Другие вопросы по тегам