Pull to refresh

Comments 14

count_up - неудобна вещь, лучше поддержать обычный относительный путь ../../my_module.

В принципе, работать будет. Иногда приходится делать такие хаки, согласен.

Однако, как я понимаю, если импортируется не один файл, а файл из библиотеки, то он сам внутри не сможет сделать локальный импорт? `from ..models import MyModel` у него не пройдет поскольку его собственный путь отсутствует в sys.path ?

Кроме всего остального, сильно опасаюсь, что code insight в PyCharm отвалится.

Правильно установленный модуль: импортируем, используем.

Модуль из другой вселенной - подпираем костылями, собираем грабли.

Вообще говоря, использовать importlib лично мне приходится довольно часто.

Например, приходится писать много однотипных парсеров для разных документов. Проще оформлять их как отдельные файлы в выделенной папке и автоматически импортировать уровнем выше и складывать в специальный словарик, чем писать кучу "from parsers.docparser_p0434 import ParserP0434v2", а потом получать ошибки из-за того что парсер написал, а добавить импорт забыл.

Да, наверное PyCharm такое не любит, но тут не он главный.

Это, наверное, один из немногих оправданных случаев. Да, наверняка есть задачи, когда надо импортировать модули из ZIP или по сети, но это единичные случаи. Обычно если хочется импортировать нестандартно, то это признак проблем с архитектурой.

За сколько секунд вы находите и исправляете потерянный импорт? Как часто это происходит?

Сколько времени уходит на поддержку этой магии и объяснения новым разработчикам как она работает? Покрыта ли она тестами?

За сколько секунд вы находите и исправляете потерянный импорт? Как часто это происходит?

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

Новых разработчиков нет, я уже 6 лет один фигачу. Документация, правда, есть, там это описано.

Покрытие тестами - только основных фич, 100% покрытие не нужно никому.

Я приветствую ваше желание покритиковать подход, но, думаю, вряд ли вы одобрите другой способ, когда в файлике явно импортируется примерно 500 модулей, в каждом по 1-3 класса.

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

В python есть штатный механизм, который позволяет интегрировать собственный загрузчик модулей и использовать стандартный синтаксис. В PEP 302 реализация хуков описана довольно непонятно, так что лучше сразу смотреть примеры, например, urlloader:

with github_repo('kragniz', 'json-sempai'):
    from jsonsempai import magic
    import tester
    print(tester.hello)

В вашем случае будет что-то вроде такого:

with absolute_import('/path/to/module/'):
    from mymodule import magic

print(magic)

В одной модульной системе на js, вместо импортов используются FQN-имена, выглядит как $path_to_module.


Имя сущности соответствует(почти) пути до нее, чтобы ей воспользоваться просто пишется имя. И конечно можно положить в переменную, чтобы 100500 раз не писать длинное имя, если необходимо, тогда выглядит как импорт в начале файла.

Непонятно, почему нельзя сделать дистрибутив из вашего пакета, установить и не заниматься всем этим?

Sign up to leave a comment.

Articles