![]() |
Как настроить виртуальное окружение Python — есть нюансы
Введение
Если работаешь с Python хоть чуть-чуть серьёзнее, то наверняка уже сталкивался с виртуальными окружениями. И даже если нет — всё равно рано или поздно придётся. Виртуальное окружение — это не просто красивая опция, а реально необходимый инструмент, который помогает держать проекты в порядке, не лезть друг другу в зависимости и не превращать систему в сплошной хаос из разных версий библиотек. Но вот не всё так просто — есть свои особенности, которые могут сбить с толку, особенно если сразу пытаться работать по гайдам, рассчитанным на «продвинутых». В этом сообщении хочу подробно рассказать, как всё правильно настраивать, на что смотреть и как избежать типичных ошибок. Что такое виртуальное окружение и зачем оно нужно Виртуальное окружение — это, грубо говоря, копия интерпретатора Python с собственной «песочницей» для библиотек. Когда ты создаёшь виртуальное окружение, оно будет независимо от системного Python и его пакетов. Представь, что каждая твоя папка с проектом живёт в своей маленькой коробочке — туда можно ставить именно те версии библиотек, которые нужны конкретно этому проекту, не боясь, что они конфликтуют с другими проектами или обновлениями в системе. Зачем вообще заморачиваться с этим? Потому что Python-проекты часто зависят от конкретных версий библиотек. Например, твой старый скрипт может требовать Django 2.2, а новый — уже на Django 4.0. Если ставить всё «на глобал», со временем библиотечные версии начнут путаться, и это будет приводить к странным ошибкам, которые иногда очень тяжело диагностировать. Где это пригодится - При разработке. Когда параллельно работаешь над несколькими проектами. - На сервере, чтобы иметь одинаковое окружение на разных машинах без конфликтов. - При тестировании и экспериментах с новыми библиотеками. - На образовательных курсах, чтобы все участники работали в одинаковом настройках и ничему не мешали. - Даже если хочешь просто быстро попробовать какую-то библиотеку без риска «засорить» систему. Как создать и активировать виртуальное окружение — простая инструкция для всех ОС Для начала — что надо знать. В Python 3.3+ стандартным инструментом для виртуалок является модуль venv. До этого часто использовали отдельный инструмент virtualenv, но сегодня venv — это нативный вариант. Создание окружения В терминале или командной строке зайди в папку своего проекта и выполните: python3 -m venv venv Здесь python3 можно заменить на python, если у вас так вызывается Python 3. Важно, чтобы версия была 3.3 или выше. Название «venv» — просто удобная конвенция, можно назвать как угодно (например, env, .venv), но хорошо, чтобы папка была скрыта или исключена из контроля версий (.gitignore), чтобы не засорять репозиторий. Активация окружения - Windows (cmd): venv\Scripts\activate.bat - Windows (PowerShell): venv\Scripts\Activate.ps1 Здесь стоит иметь в виду, что по умолчанию PowerShell может блокировать выполнение скриптов, и нужно изменить политику выполнения (например, на RemoteSigned) или запускать с правами администратора. - Linux/Mac: source venv/bin/activate Когда окружение активируется, обычно в командной строке появляется приставка с названием окружения (например, (venv)), что визуально помогает не забыть, что ты в виртуалке. Что делать дальше После активации устанавливай библиотеки через pip, например: pip install requests Эта библиотека установится именно в виртуальное окружение, и её не будет касаться системный питон. Увидеть список установленных пакетов можно командой: pip list Чтобы выйти из виртуального окружения, просто напиши: deactivate Нюансы и частые проблемы 1. Что если в системе несколько версий Python? В таком случае нужно указывать, какой именно интерпретатор использовать. Можно делать так: python3.8 -m venv venv38 или даже полный путь: /usr/bin/python3.8 -m venv venv38 2. Проблемы с активацией в PowerShell Если при попытке activate.ps1 возникает ошибка об Execution Policy, нужно запустить PowerShell от имени администратора и прописать: Set-ExecutionPolicy RemoteSigned Это даст разрешение на запуск локальных скриптов. 3. Привязка к системному пакету pip Иногда виртуальное окружение создаётся без pip. Тогда нужно его явно установить: python -m ensurepip --upgrade или переустановить виртуальное окружение. 4. Ошибки при импортировании библиотек Чаще всего это следствие того, что виртуальное окружение не активировано, а ты пытаешься запускать скрипт в системном питоне. Либо пакет установлен не в виртуалку. 5. Путь к python внутри виртуалки Если хочешь запускать скрипты без активации окружения, можно использовать путь к python внутри venv, например: ./venv/bin/python your_script.py 6. Не забывай про .gitignore Не коммить папку с виртуальным окружением в репозиторий. Обычно в .gitignore добавляют venv/ или .venv/ Практические примеры использования Пример 1. Работа над веб-проектом с Flask Создаёшь папку, включаешь виртуалку, ставишь flask: python3 -m venv venv source venv/bin/activate pip install flask Пишешь код, запускаешь локальный сервер. Если потом понадобится обновить Flask, делаешь это только в этом окружении по отдельности. В других проектах останется старая версия. Пример 2. Тестирование разных версий библиотеки Если надо проверить, как работает твой код с разными версиями, создаёшь два окружения: python3 -m venv venv_old source venv_old/bin/activate pip install somepackage==1.0.0 deactivate python3 -m venv venv_new source venv_new/bin/activate pip install somepackage==2.0.0 Запускаешь тесты, сравниваешь результат. Чек-лист перед созданием виртуального окружения - Проверил версию Python (python --version) - Убедился, что установлен pip (pip --version) - Создал папку проекта - Запустил команду создания окружения (python3 -m venv venv) - Активировал виртуалку согласно ОС - Проверил, что в командной строке появился префикс с названием окружения - Установил необходимые библиотеки - Проверил установленные пакеты (pip list) - Добавил папку окружения в .gitignore - При работе в PowerShell проверил политику выполнения Типичные ошибки и к чему они приводят - Забыл активировать виртуалку — работаешь в глобальном Python, ставишь пакеты в систему и получаешь конфликты. - Запустил скрипт из системы, а не из окружения — импорт резко может не найти нужные библиотеки. - Попытался создать окружение с Python 2 — venv не поддерживается, нужно использовать virtualenv. - Забыл изменить Execution Policy в PowerShell — неактивируемое окружение. - Положил папку виртуалки в репозиторий — мусор в git и увеличенный размер репы. - Устанавливаешь библиотеки глобально и в виртуальной среде одновременно — путаница, сложно понять, где что лежит. FAQ Вопрос: Можно ли использовать virtualenv вместо venv? Ответ: Можно, virtualenv старше и независим, но сегодня venv встроен и отлично работает. virtualenv иногда полезен, если нужен Python ниже 3.3 или больше кастомизации. Вопрос: Как сделать так, чтобы окружение активировалось автоматически? Ответ: Можно настроить оболочку — например, в bash или zsh запускать source venv/bin/activate при заходе в каталог. Есть также инструменты типа direnv, которые помогают автоматически подгружать окружения. Вопрос: Можно ли создавать виртуальные окружения для проектов на Python 2? Ответ: Для Python 2 venv не работает, используется virtualenv. Но Python 2 уже deprecated, так что рекомендуем сразу переходить на Python 3. Вопрос: Что делать, если нужно несколько разных версий Python на одном компьютере? Ответ: Устанавливать их параллельно, и создавать виртуальные окружения с явным указанием нужного интерпретатора, как я показал выше через полный путь или python3.8 -m venv. Вопрос: Почему после активации окружения в Windows появляется ошибка с активацией через PowerShell? Ответ: Скорее всего, нужно изменить Execution Policy, потому что Windows блокирует выполнение скриптов по умолчанию. Вопрос: Как сохранить зависимости проекта? Ответ: Используйте команду pip freeze > requirements.txt, чтобы сохранить список пакетов, и потом pip install -r requirements.txt для восстановления. В общем, виртуальные окружения — это мастхэв для любого Python-разработчика. Пока не привыкнешь — будет казаться сложным, но как только наладишь процесс, работа станет гораздо проще и приятнее. Если кто-то встречал ещё какие-то странности или хочет добавить свои лайфхаки — давайте обсуждать! |
| Время: 09:17 |