Python WindowsLinuxmacOSPython 3

Python: После установки пакета из pip остаётся старый код модуля

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

После pip install приложение может продолжать выполнять старую версию модуля, потому что запускается в другом окружении, импортирует файл проекта с тем же именем или уже держит модуль в памяти работающего процесса.

В этой статье
  1. Что произошло и когда проявляется ошибка
  2. Причины и диагностические признаки
  3. Подробная пошаговая диагностика и исправление
  4. Как проверить, что проблема устранена
  5. Если исправление не помогло

#Что произошло и когда проявляется ошибка

После pip install приложение может продолжать выполнять старую версию модуля, потому что запускается в другом окружении, импортирует файл проекта с тем же именем или уже держит модуль в памяти работающего процесса.

#Причины и диагностические признаки

Возможная причинаКак узнатьЧто делать
Приложение не перезапущеноИмпортированный модуль остаётся в sys.modules работающего процесса.Обновление видно в pip, но служба всё ещё возвращает старое поведениеСделать контролируемый перезапуск после проверки.
Обновили не тот PythonПакет установлен в другое окружение.pip --version отличается от sys.executable приложенияЗапустить python -m pip нужным Python.
Локальный файл затеняет пакетИмпорт выбирает одноимённый локальный модуль.module.__file__ ведёт в каталог проекта, а не site-packagesИсправить конфликт и тестировать точный путь.

#Подробная пошаговая диагностика и исправление

  1. 1. Проверьте источник реально импортируемого модуляВ окружении приложения добавьте временный вывод пути импортируемого модуля. Для примера указан requests; замените на реальную библиотеку. Вывод __file__ поможет отличить пакет из site-packages от локального файла.
  2. Пример кода по теме
    Python
    Образец кода для файла .py в тестовой копии проекта; перед внедрением замените имена файлов на реальные.
    import requests, sys
    print(sys.executable)
    print(requests.__file__)
    print(getattr(requests, "__version__", "нет атрибута"))
  1. 2. Сравните версии в pip того же PythonВ терминале этой же среды выполните python -m pip show requests. Сверьте версию и расположение с файлом из предыдущего шага. В Windows служба может работать под иным пользователем и запускать Python по абсолютному пути.
    Linux · Терминал (Bash)Команда
    Замените requests на имя дистрибутива; запуск обычным пользователем.
    python -m pip show requests
  1. 3. Исключите одноимённые файлыПроверьте, нет ли в папке проекта requests.py или каталога requests, который перекрывает установленный пакет. При необходимости переименуйте только ваш модуль и поправьте импорты. Не удаляйте __pycache__ по всему серверу: эти файлы не являются причиной, если импорт берёт чужой файл.
  1. 4. Остановите тестовый процесс и запустите зановоВ обычном сеансе Python полностью завершите интерпретатор и стартуйте заново. Для рабочего сервиса используйте предусмотренную проектом процедуру контролируемого перезапуска и предварительно проверьте наличие резервной копии и возможность отката. Не полагайтесь на importlib.reload() как универсальное решение: уже импортированные объекты и расширения могут оставаться старыми.
  1. 5. Проверьте функцию, а не только номер версииВ новом процессе проверьте module.__file__, версию дистрибутива и одну изменённую функцию на тестовых данных. Сопоставьте новый результат с ожидаемым поведением по документации библиотеки; если API изменился, обновите код или восстановите совместимую версию в отдельном окружении.

#Как проверить, что проблема устранена

После нового запуска приложение импортирует ожидаемый файл нужной версии и выполняет проверяемое действие по новому контракту.

#Если исправление не помогло

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

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.