![]() |
Эффективное управление виртуальными окружениями в Python 3.13/3.14: лучшие практики и автоматизация
Эффективное управление виртуальными окружениями в Python 3.13/3.14: лучшие практики и автоматизация
Ребят, всем привет! Сижу на Python 3.14, и хотелось бы поделиться парой фишек, которые реально сэкономили мне кучу времени с виртуальными окружениями. Если вы до сих пор руками мусорите в активации, или запускаете `python3 -m venv` и ждёте пару минут — зацените, что появилось нового и как это раскачать. --- ### Что реально поменялось в venv? В последних версиях venv стал создавать среды куда быстрее и аккуратнее. На Windows, например, я заметил, что теперь пути до `Scripts` и активация меньше глючат. Ну и мультиплатформенная поддержка стала заметно чище — можно писать скрипты один раз, и они будут работать и на Linux, и на Mac. Вот простой лайфхак: если у вас в проекте есть файл с зависимостями, то чаше всего достаточно делать так: ```bash python3.14 -m venv .venv source .venv/bin/activate # или .venv\Scripts\activate на винде pip install --upgrade pip pip install -r requirements.txt ``` Но что если с таким подходом качаешься по разным проектам? Тут уже приходится задумываться о более продвинутой автоматизации. --- ### Погнали с pipx Для тех, кто предает отдельное значение CLI-утилитам типа black или mypy — рекомендую pipx. Это типо менеджер виртуалок, который не создаёт мозг с кучей лишних окружений, а просто ставит и запускает нужные инструменты максимально изолированно. Например: ```bash pipx install black pipx run mypy myproj/ --strict ``` У меня с помощью pipx не раз плавно улаживались различия версий линтеров в разных проектах — никакого глобального засорения pip’ом. --- ### Автоматизация создания окружений — жизнь в кайф Где у меня зависал мозг — так это при каждой смене ветки или новой машине качать зависимости вручную. Чтобы это поправить, сделал вот такой простенький скрипт на Python, чтобы он создавал виртуалку, апгрейдил pip и ставил зависимости. ```python import subprocess import sys import os def create_env(env_path='.venv', req_file='requirements.txt'): if not os.path.exists(env_path): subprocess.run([sys.executable, '-m', 'venv', env_path], check=True) pip_exec = os.path.join(env_path, 'Scripts' if sys.platform == 'win32' else 'bin', 'pip') subprocess.run([pip_exec, 'install', '--upgrade', 'pip'], check=True) subprocess.run([pip_exec, 'install', '-r', req_file], check=True) print(f'Окружение {env_path} готово!') if __name__ == '__main__': create_env() ``` Запускаю и забываю про дрочню с клонами/переустановками вручную. Кстати, его же запустил в CI — и там супер! --- ### Виртуалки и CI/CD и почему это важно Вот мой минимальный рабочий блок для GitHub Actions: ```yaml jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v4 with: python-version: 3.14 - name: Create venv run: python3.14 -m venv .venv - name: Install deps run: .venv/bin/pip install -r requirements.txt - name: Run tests run: .venv/bin/pytest tests/ ``` Обратите внимание — ни в коем случае не используйте глобальный python и пакеты, иначе в одной из сборок может вырасти загадочный баг из-за системных библиотек. --- ### Как справляться с конфликтами и несовместимостями Встречал неоднократно, когда на dev и prod версии numpy или pandas отличались, и приложение творило махинации с данными. Тут на помощь приходят: - `pip check` — проверка целостности библиотек - `constraints.txt` — умелое фиксирование критичных версий, чтобы команды не обновляли что попало Пример: ```bash pip install -r requirements.txt -c constraints.txt ``` Принудительная жёсткая фиксация версий — иногда это лучшее решение, чем ловить баги в продакшене. --- В общем, с новыми python-версами реально шаг в сторону удобства в виртуалках сделан. Они перестают быть вечным загадочным коридором зловещих багов. А у кого как? Какие у вас фишки или любимые инструменты для работы с venv на Python 3.13/3.14? Может, кто автоматические обновления виртуалок настроил так, чтобы раз — и готово? Где у вас затыки бывают чаще всего? Давайте обсудим! |
Да, с 3.14 virtualenv реально подрос, теперь быстрее и стабильнее, особенно на винде. Я вот тоже за pipx — удобно таскать утилиты, не создавая кучу окружений. Скрипт на автомат — топовая идея, я пока руками делаю, но надо бы тоже так замутить, чтобы не забывать обновлять зависимости.
|
| Время: 00:14 |