Если вы переместили проект Python на Mac и его .venv перестал работать, пересоздайте окружение в новом расположении проекта. Виртуальные окружения Python содержат пути, привязанные к месту их создания, поэтому изменение имени папки или родительской директории может нарушить активацию и работу установленных команд. Сохраните файлы проекта, удалите только старый .venv, затем создайте чистое окружение и переустановите зависимости из файлов зависимостей проекта. Документация Python по venv описывает окружения как в целом непереносимые и рекомендует пересоздавать их после перемещения.
Почему перемещенное окружение ломается
Виртуальное окружение хранит собственную конфигурацию Python и создает исполняемые скрипты, содержащие пути к интерпретатору этого окружения. Когда вы перемещаете папку проекта, эти пути могут по-прежнему указывать на старое место. Из-за этого команда source .venv/bin/activate может ссылаться на несуществующий файл, а команда, установленная внутри окружения, — вызывать интерпретатор, которого больше нет. Повторная активация или переименование окружения не позволяют надежно исправить эти жестко заданные пути; предусмотренное документацией Python решение — создать окружение заново на новом месте. Python: venv and how environments work
1. Откройте перемещенный проект в Terminal
В Terminal перейдите в текущую директорию проекта. В zsh или bash заключайте путь в кавычки, если он содержит пробелы или специальные символы оболочки; замените пример пути на реальное расположение папки:
cd "$HOME/Projects/My Python Project"
pwd
ls -la
Убедитесь, что вы находитесь в корневой папке проекта и видите его исходные файлы и данные о зависимостях. К распространенным файлам зависимостей относятся requirements.txt, pyproject.toml и соответствующие lock-файлы. Не удаляйте проект целиком или его файлы зависимостей. Если вы не уверены, какая именно директория является старым окружением, изучите ее содержимое перед удалением.
2. Удалите только старое окружение
Если папка окружения называется .venv и находится в корне проекта, удалите только ее. Сначала деактивируйте окружение, если строка приглашения оболочки показывает, что оно активно; стандартная команда для этого — deactivate. Затем выполните:
deactivate
rm -rf .venv
Если окружение не активно, команда deactivate может сообщить, что она недоступна; продолжайте без нее. Перед запуском rm -rf .venv убедитесь с помощью pwd, что вы находитесь в корне проекта, и что .venv — это именно то окружение, которое вы собираетесь заменить. Если ваше окружение называется иначе или расположено в другом месте, укажите точный путь к нему и будьте внимательны, чтобы не удалить исходный код или данные проекта. Python рекомендует удалять старое окружение после создания нового; в этой статье оно удаляется сначала, чтобы однозначно определить целевую папку. Python: venv and how environments work
3. Пересоздайте окружение с нужной версией Python
Если для проекта указана определенная версия Python, используйте соответствующий интерпретатор, установленный на вашем Mac. Например, если установлен python3.12 и проекту требуется эта версия:
python3.12 -m venv .venv
source .venv/bin/activate
python --version
python -m pip --version
Если проект не требует конкретной версии и вам подходит стандартный python3, выполните python3 -m venv .venv. В macOS стандартной командой активации для zsh и bash является source .venv/bin/activate. Проверьте вывод python --version перед восстановлением пакетов; после активации команда python должна ссылаться на интерпретатор виртуального окружения. Python: venv activation and interpreter paths
Пользователям Homebrew следует устанавливать пакеты проектов строго внутри виртуального окружения. Homebrew помечает текущий Python как управляемый извне (externally managed) и рекомендует использовать окружения проектов для изоляции зависимостей. Если python3 отсутствует или выбирает неподходящий интерпретатор, обратитесь к установщику или менеджеру версий, через который был установлен Python для этого проекта; не пытайтесь решить проблему установкой пакетов в системные директории Python macOS. Homebrew: Language Runtimes and Packages
4. Переустановите зависимости проекта
Используйте существующие инструкции по установке зависимостей или lock-файл проекта, если они доступны. Для проекта, отслеживающего зависимости в requirements.txt, переустановите их с помощью Python и pip виртуального окружения:
python -m pip install -r requirements.txt
Использование команды python -m pip гарантирует, что pip привязан к интерпретатору, выбранному командой python. Если проект использует другой менеджер зависимостей или lock-файл, следуйте документированной процедуре установки для этого инструмента, не пытаясь вручную составлять requirements-файл или игнорировать lock-файл. Новое окружение venv содержит pip по умолчанию, а документация Python прямо рекомендует файл requirements для воспроизведения набора установленных пакетов. Python: venv, Python: Installing Python modules
Если установка завершается сбоем из-за того, что пакету требуется компилятор, нативная библиотека или версия Python, которая не поддерживается проектом, само виртуальное окружение может быть создано правильно, но зависимости все еще требуют установки системных компонентов. Ознакомьтесь с инструкциями по установке конкретного пакета или проекта и устраните указанную ошибку; не пытайтесь решить проблему вызовом sudo pip или изменением прав доступа к системным файлам Python. Homebrew настоятельно не рекомендует подобные обходные пути для управляемых директорий. Homebrew: Language Runtimes and Packages
5. Проверьте активность восстановленного окружения
Убедитесь, что выбранный интерпретатор находится внутри нового .venv, затем запустите стандартную команду запуска проекта или выполните тесты:
python -c 'import sys; print(sys.executable)'
Выведенный путь должен вести в директорию .venv вашего проекта. Если он указывает на другое место, активируйте окружение из корня проекта повторно и проверьте конфигурационные файлы оболочки или псевдонимы (alias) команд, которые могут переопределять выбор Python. Эта проверка подтверждает корректность выбора интерпретатора; она не гарантирует работоспособность всех зависимостей или функций приложения.
К перемещенному виртуальному окружению лучше относиться как к легко заменимому: сохраняйте исходный код и файлы зависимостей, а затем просто пересобирайте .venv там, где проект находится сейчас. Повторение этих шагов при каждом перемещении — надежный и документированный способ восстановления.
Источники
venv — Creation of virtual environments — Python Software Foundation
Installing Python modules — Python Software Foundation
Language Runtimes and Packages — Homebrew