Добавить в корзинуПозвонить
Найти в Дзене

83: Почему Cursor «ломает» импорты и как исправить ошибку без проблем?

Иногда садишься такой писать код, открываешь свежий проект в Cursor, руки чешутся что-нибудь оптимизировать, а IDE в ответ: «Cannot find module», красным такой, обиженным. Ты смотришь на экран, на импорт, на свой tsconfig или requirements.txt, и тихо начинаешь подозревать, что жизнь пошла под откос в тот момент, когда ты решил «попробовать новую классную IDE с ИИ». Особенно смешно, когда ты уверен, что все библиотеки стоят, пути прописаны, Python или TypeScript настроены, а Cursor гордо делает вид, что никогда в жизни не слышал про твой модуль. И вот тут начинается самое интересное: дело не только в IDE, а в том, как мы вообще организуем свою разработку и почему до сих пор делаем всё руками, как в 2008. Если посмотреть на эту историю без эмоций, Cursor не то чтобы «ломает» импорты, он просто очень честно показывает бардак в конфиге, зависимостях и структуре проекта. Иногда, конечно, он тупит с автоимпортом, не подхватывает модули, ругается на относительные пути и вываливает подсказки и
Оглавление
   Как избежать проблем с импортами в Cursor Артур Хорошев
Как избежать проблем с импортами в Cursor Артур Хорошев

Почему Cursor «ломает» импорты и при чем тут вообще автоматизация

Иногда садишься такой писать код, открываешь свежий проект в Cursor, руки чешутся что-нибудь оптимизировать, а IDE в ответ: «Cannot find module», красным такой, обиженным. Ты смотришь на экран, на импорт, на свой tsconfig или requirements.txt, и тихо начинаешь подозревать, что жизнь пошла под откос в тот момент, когда ты решил «попробовать новую классную IDE с ИИ». Особенно смешно, когда ты уверен, что все библиотеки стоят, пути прописаны, Python или TypeScript настроены, а Cursor гордо делает вид, что никогда в жизни не слышал про твой модуль. И вот тут начинается самое интересное: дело не только в IDE, а в том, как мы вообще организуем свою разработку и почему до сих пор делаем всё руками, как в 2008.

Если посмотреть на эту историю без эмоций, Cursor не то чтобы «ломает» импорты, он просто очень честно показывает бардак в конфиге, зависимостях и структуре проекта. Иногда, конечно, он тупит с автоимпортом, не подхватывает модули, ругается на относительные пути и вываливает подсказки из другого вселенной. Но чаще это не магический баг, а вполне конкретная комбинация: неправильно настроенный language server, кривой tsconfig.json, не тот интерпретатор Python, виртуальное окружение забыли активировать, зависимости не установили в тот env, и по мелочи. И вот вместо того, чтобы один раз разобрать цепочку «импорт — среда — зависимости», мы сидим, кликаем по красным подчёркиваниям и по сто раз переустанавливаем библиотеки.

Что именно ломается в Cursor и почему он ведет себя так, будто вы еще не проснулись

История с импортами в Cursor почти всегда крутится вокруг одних и тех же моментов, просто проявляется по-разному. В TypeScript он не видит модуль, который лежит у вас в src, потому что paths в tsconfig настроены на одно, а сборщик живёт в другой реальности. В Python ему показывают проект, где есть venv, но сам Cursor смотрит системный интерпретатор, в котором половина библиотек вообще не установлена. Автоимпорт при этом пытается «помочь», подсовывает какой-нибудь рандомный модуль с похожим именем, а потом вы удивляетесь, почему всё собирается в ошибку. Если зажать Ctrl+. и вызвать Quick Fix, часто видно правду: IDE просто не понимает, откуда брать модуль, потому что language server ничего о нём не знает, а вы ему, честно говоря, и не рассказали.

Ещё один классический случай: вы переименовали файл, реструктурировали папки, переписали относительные импорты на абсолютные, а Cursor остался жить в прошлом. Кеш не обновился, индекс не перестроился, автодополнение пляшет вокруг старых путей. На старте нового проекта многие даже не проверяют, какой интерпретатор или какой workspace выбран, особенно когда IDE «умная» и вроде делает всё сама. В итоге вы получаете странную смесь: по факту модуль в проекте есть, но с точки зрения среды — его как бы нет. И вот эта тонкая грань «как бы нет» превращает вечер, который вы собирались посвятить логике бота или красивой бизнес-автоматизации, в копание в импортах.

Можно, конечно, чинить всё руками. Но можно и жить нормально

Самый безопасный способ страдать — исправлять каждый импорт руками. Увидели ошибку — идете в requirements.txt или package.json, руками ставите зависимости, потом вручную правите пути, проверяете конфиги, перегружаете Cursor, закрываете и открываете проект, перезапускаете language server. Раз, два, десять. В маленьком проекте это ещё терпимо, а когда у вас несколько сервисов, монорепа, пара внутренних библиотек и человек пять в команде — начинается нескончаемый сериал «у кого сегодня все сломалось после обновления». И вот тут многие впервые задумываются: может, уже хватит надеяться, что IDE всё сделает за нас, и пора добавить нормальную автоматизацию.

Автоматизация в этой истории — не абстрактное «ну, что-нибудь настроим», а очень конкретная штука: поймал ошибку с импортом — триггернул процесс, который сам проверил зависимости, структуру проекта, обновил нужные файлы, дернул нужные команды, а тебе просто кинул сообщение «я всё починил, иди пиши код». И самое забавное, что сейчас для этого не обязательно городить свои скрипты и город из bash, cron и костылей. Есть нормальные сервисы уровня make.com, где ты собираешь цепочку действий как конструктор, без лишнего мазохизма с серверами и деплоем.

Если вы работаете с нейросетями, пишете ботов, автоматизируете заявки из CRM или собираете отчеты из разных систем, то это вобще тот же самый паттерн: событие — обработка — результат. Ошибки импортов, странные автопочинки и «сломанные» среды разработки — просто ещё один процесс, который можно засунуть в такую схему. И перестать тратить мозг на одно и то же действие по кругу.

Как подключить make.com к вашему рабочему процессу и приручить эти импорты

Представьте классический сценарий: вы работаете в Cursor, код лежит на GitHub или GitLab, пушите изменения — и дальше всё начинается. Где-то отвалился импорт, кто-то добавил новую библиотеку, но забыл обновить зависимости, у кого-то локально всё ок, а у другого загорается новогодняя ёлка из ошибок. Вместо того чтобы играть в «у кого окружение более святое», можно подключить службу, которая постоянно следит за репозиторием и реагирует на любые изменения в файлах, связанных с импортами, зависимостями и конфигами. Make.com как раз про это: ты описываешь сценарий, он сам крутится и делает грязную работу.

Ты настраиваешь на make.com сценарий: ловим пуш в репозиторий, смотрим, менялись ли файлы вроде package.json, pyproject.toml, requirements.txt, tsconfig.json или вообще любые файлы, где есть импорты. Если да — идем дальше. Сервис может дернуть скрипт развертывания, обновить зависимости в тестовом окружении, прогнать статический анализ, а потом отправить тебе уведомление в Telegram, Slack или хоть в личку в ВК, что «после вот этого коммита обнаружена проблема с такими-то импортами». И это не «ИИ всё сделал», а вполне прозрачные, управляемые шаги, которые можно редактировать под свой процесс.

Если вам это близко и хочется не просто «раз в жизни попробовать», а выстроить нормальные процессы вокруг make.com и нейросетей, нормальный путь — учиться этому осознанно. Хотите научиться автоматизации рабочих процессов с помощью сервиса make.com и нейросетей? Подпишитесь на наш Telegram-канал, там много живых примеров, разборов и рабочих схем, а не просто скриншотов с радостными стрелочками.

Где тут вообще пазл с курсами и зачем это всё бизнесу

Если смотреть на всё это не глазами одинокого разработчика, а с позиции бизнеса или команды, история с импортами — это просто симптом. Сегодня у вас Cursor орет на модуль, завтра менеджер не может выгрузить вменяемый отчёт по лидам, послезавтра отдел продаж руками вбивает данные в CRM, потому что «интеграция опять сломалась». В основе всех этих сюжетов лежит одна и та же вещь: процессы не автоматизированы, а завязаны на людях, которые устали, отвлеклись, забыли или просто не обязаны помнить все технические нюансы. Когда делаешь нормальные сценарии на make.com, постепенно выносишь из человеческих рук всё, что можно описать как последовательность шагов.

И тут становится заметно, что умение строить такие сценарии — это не «прикольный хак», а новая обязательная грамотность. Особенно для тех, кто сегодня работает с данными, IT, маркетингом, операционкой. Ты либо умеешь собирать такие цепочки и управлять ими, либо тонешь в бесконечной рутине, где Cursor «ломает» импорты, менеджер «забывает» что-то обновить, а никто толком не знает, сколько вы потеряли на этом денег. Я в какой-то момент понял, что людям не хватает не только знания инструментов, а целостного подхода: как от проблемы дойти до сценария, от сценария — до стабильной автоматизации, и всё это так, чтобы не свихнуться.

Отсюда и родилась идея нормального обучения по make.com — не в формате «тыкните сюда, получите магию», а в формате: вот реальные кейсы, вот как мы их собираем, вот где они ломаются, вот как мы чинем и масштабируем. Если хотите в это погрузиться системно — посмотрите обучение по make.com, я там как раз рассказываю, как уходить от ручной возни к более взрослым автоматизациям, которые живут годами.

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

  📷
📷

Обучение по make.com

Как автоматизация реально помогает с ошибками импортов, а не просто красиво звучит

Возьмем конкретную ситуацию. У вас проект на Python, вы работаете в Cursor, используете виртуальное окружение, но в команде каждый ставит зависимости по настроению. Кто-то не обновил requirements.txt, кто-то локально поставил новую библиотеку, забыл её зафиксировать, кто-то решил поэкспериментировать с версией. В итоге у одного всё запускается, у другого — импортная каша. В нормальном автоматизированном процессе при каждом пуше сценарий на make.com поднимает чистое окружение, ставит зависимости, пробует запустить проверки, и если что-то падает — вы сразу видите, какая именно библиотека не подтянулась, где несовместимость версий и какой файл вообще это вызвал. Не через неделю, когда клиент уже психует, а через минуту после коммита.

В TypeScript история такая же. Вы поменяли структуру папок, обновили tsconfig, убрали часть относительных импортов, добавили alias. Cursor может некоторое время жить в своем отдельном аду, показывая вам ошибки и не всегда понимая, откуда импортировать. Но если у вас к репозиторию привязан сценарий, который после каждого пуша прогоняет сборку, анализирует логи, парсит ошибки по импортам и присылает вам в Telegram компактный разбор «сломались вот такие пути, вот такой файл, вот такой модуль не найден» — вы уже не полагаетесь на случай. Более того, такой сценарий может автоматически создавать issue в GitHub с контекстом ошибки, чтобы никто не делал скриншот терминала и не терял его в чате.

Отдельная тема — хранение и шаблоны. Часто в проекте есть типовой набор конфигов, зависимостей и путей, но каждый новый разработчик всё равно копирует руками и что-то недотягивает. На make.com можно собрать сценарий, который при создании новой ветки или нового репозитория автоматически подкидывает туда нужные шаблоны импортов, заготовленные конфиги, базовые структуры папок. А если вы не хотите каждый раз заново изобретать велосипед — используйте готовые сценарии, те самые блюпринты. Я делаю отдельную подписку на такие вещи, чтобы не мучить людей повторяющимися настройками: блюпринты по make.com экономят кучу нервов и кофе.

Почему это всё особенно ценно для российского рынка и реальных задач

Российская реальность забавна тем, что многие популярные западные сервисы у нас официально работают криво или через костыли, а бизнесу всё равно надо жить, продавать, считать деньги, поддерживать клиентов. В итоге у нас появляются связки: Telegram-боты вместо email рассылок, CRM, которые надо интегрировать через пол-API, платежные решения с архитектурой «не трогай, оно и так еле дышит». В этой среде ожидать, что IDE сама чудесным образом всё поймет и всегда будет знать, откуда что импортировать — наивно. А вот выстроить автоматизацию вокруг make.com — как раз жизнеспособный путь: сервис нормально себя чувствует, позволяет клеить воедино наши локальные инструменты и зарубежные, и в этом плане очень неплохо заходит в российских проектах.

Те же проблемы с импортами иногда всплывают не только в коде, но и на уровне «мы подключили новый сервис, но никто не обновил схему данных». Автоматизация тут помогает не только программистам. Маркетологу можно сделать сценарий, который при любом изменении в структуре базы или полей лидов в CRM присылает уведомление «здесь поменяли, проверь выгрузки». Продажнику — уведомления о новых лидах безо всякого «зайдите в сто пятьсот интерфейсов и посмотрите». А разработчику — автоматические проверки, что новые сервисы, которые он подключил, корректно импортируются, авторизуются и не падают в логах через минуту.

Если вы хотите не просто жить от пожара к пожару, а выстраивать такие процессы системно и с запасом на рост — снова отсылаю к нормальному обучению, где всё это раскладывается по полочкам, со сценариями, разбором кейсов и поддержкой: вот ссылка ещё раз, чтобы не искать глазами вверху страницы — обучение по make.com.

FAQ по Cursor, импортам и автоматизации через make.com

Почему в Cursor не работает автоимпорт, хотя в VS Code всё ок?
Чаще всего проблема в том, что Cursor использует свои настройки workspace и language server. Проверьте выбранный интерпретатор Python или версию Node, убедитесь, что проект открыт как корневая папка, а не как отдельный файл. В TypeScript загляните в tsconfig.json — пути и baseUrl должны совпадать с реальной структурой проекта. Не забывайте про Ctrl+. — там видно, что именно IDE пытается импортировать или не может найти.

Cursor пишет «Cannot find module», хотя библиотека установлена. Что делать?
Почти всегда это расхождение между тем окружением, куда вы ставили зависимости, и тем, которое видит Cursor. В Python проверьте, какой venv подключен в IDE. В Node/TS убедитесь, что node_modules лежит там, где его ожидает проект, и не забыли ли вы npm install или pnpm install после смены версии Node. Иногда помогает полная переиндексация проекта и перезапуск языка сервера, но корень почти всегда в окружении.

Можно ли через make.com как-то «автоматически чинить» импорты?
Автоматически подправлять каждый импорт — не лучшая идея, но через make.com удобно ловить ошибки и запускать проверки. Например, при каждом пуше в репозиторий запускать сборку, тесты и статический анализ, парсить ошибки по импортам и отправлять отчеты в Telegram. Плюс можно автоматически создавать задачи в трекере, если после определенного коммита начали сыпаться одинаковые ошибки импортов.

Как связать Cursor, GitHub и make.com, чтобы всё работало вместе?
Cursor сам по себе просто IDE, ключевое звено здесь — репозиторий. Настраиваете в make.com сценарий, который реагирует на события в GitHub или GitLab: пуш, пулл-реквест, релиз. Дальше вы уже решаете, какие проверки и действия выполнять: запуск тестов, обновление зависимостей, разбор логов, уведомления. IDE тут просто точка входа, а вся магия живет в связке «репозиторий — сценарий на make.com». Зарегистрироваться и начать можно здесь:
https://www.make.com/en/register?pc=horosheff.

Я не программист, но занимаюсь бизнесом. Мне вообще нужно всё это знать?
Знать детали импорта модулей — нет, вас можно пожалеть. А вот понимать, что любая повторяющаяся рутина (заявки, отчеты, уведомления, согласования) может быть автоматизирована через такие сервисы, очень полезно. Не чтобы вы потом сами писали сценарии, а чтобы могли адекватно заказывать и оценивать такую работу. Если хотите войти в тему без лишнего фанатизма, начните с подписки на
Telegram-канал, там много кейсов на человеческом языке.

Где взять готовые сценарии и не собирать всё с нуля?
Есть готовые решения в формате блюпринтов — преднастроенные сценарии, которые можно адаптировать под себя. Для make.com у нас есть отдельная подписка с такими заготовками:
блюпринты по make.com. Это удобно, когда не хочется в десятый раз собирать один и тот же конвейер «лиды — CRM — уведомления — отчеты».

С чего лучше начать обучение автоматизации на make.com, если я уже кое-как код пишу?
Если вы уже знакомы с нейросетями и IDE вроде Cursor, стартовать проще всего с структурированного курса: пройтись по базовым блокам, понять логику платформы, потом перейти к своим задачам. Самостоятельно тоже можно, но времени уйдет заметно больше, особенно на отладку. Посмотрите программу и форматы тут:
обучение по make.com, там можно подобрать удобный формат под текущий уровень и задачи.