Работа с виртуальными окружениями Python в Ubuntu: настройка, использование и альтернативы
Создание виртуального окружения Python в Ubuntu
Основной метод: встроенный модуль venv
Начиная с Python 3.3, в стандартную поставку входит модуль venv. Он позволяет создать изолированное окружение без установки дополнительных пакетов. Для работы требуется Python 3 и пакет python3-venv (в некоторых дистрибутивах).
Установка необходимых пакетов (если ещё не установлены):
sudo apt update
sudo apt install python3 python3-venv python3-pipPython venv ubuntu (создать виртуальное окружение python в ubuntu)
Создание окружения в директории проекта:
python3 -m venv myenvPython activate window (активация виртуального окружения python в windows)
После выполнения появится папка myenv с копией интерпретатора и стандартных библиотек. Активация окружения:
source myenv/bin/activate
Python venv exit (выход из виртуального окружения python)
В командной строке появится префикс (myenv). Установка пакетов внутри окружения:
pip install requestsVenv python version (версия python в виртуальном окружении)
Деактивация выполняется командой:
deactivatePython venv commands (команды виртуального окружения python)
Удаление окружения – достаточно удалить папку:
rm -rf myenvPython django venv (настройка виртуального окружения для django)
Возможные проблемы и их решения
Ошибка: The virtual environment was not created successfully because ensurepip is not available. Решение – установить пакет python3-venv:
sudo apt install python3-venvPython venv linux (использование виртуального окружения на linux)
Ошибка: Command 'python3' not found. Установите Python 3:
sudo apt install python3Python unable to create venv (ошибка создания виртуального окружения python)
Окружение не активируется: source myenv/bin/activate: No such file or directory. Проверьте, что папка myenv создана и содержит bin/activate. Если создавалось с другим именем – скорректируйте путь.
Проблемы с кодировкой при активации. Убедитесь, что локаль установлена корректно:
export LANG=en_US.UTF-8
source myenv/bin/activateVenv bin python (путь к интерпретатору в виртуальном окружении)
Как создать изолированное окружение с поддержкой разных версий Python?
Для выбора конкретной версии Python можно использовать virtualenv – сторонний инструмент, работающий с Python 2 и 3. Установка:
pip install virtualenvVenv python 3 (создание виртуального окружения с python 3)
Создание окружения с указанием версии Python (например, 3.8):
virtualenv -p /usr/bin/python3.8 myenvPython venv install packages (установка пакетов в виртуальное окружение python)
Активация и деактивация такие же, как для venv. Этот вариант удобен, если в системе несколько интерпретаторов и требуется строго заданная версия.
Как управлять окружениями с разными версиями Python и библиотеками в проектах Data Science?
Conda (часть дистрибутива Anaconda/Miniconda) предоставляет собственный менеджер окружений и пакетов. Установка Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
Создание окружения с Python 3.10 и пакетом numpy:
conda create -n myenv python=3.10 numpy
Активация:
conda activate myenv
Деактивация:
conda deactivate
Conda решает проблему несовместимости библиотек (например, TensorFlow и PyTorch) за счёт собственных репозиториев.
Как автоматизировать управление зависимостями и окружением в проекте?
Poetry – современный инструмент для управления зависимостями и сборки пакетов. Установка:
curl -sSL https://install.python-poetry.org | python3 -
Создание нового проекта с виртуальным окружением:
poetry new myproject
cd myproject
poetry install
Poetry автоматически создаёт изолированное окружение и генерирует файлы pyproject.toml и poetry.lock. Активация окружения:
poetry shell
Добавление зависимости:
poetry add requests
Как объединить управление зависимостями и окружением в одном инструменте?
Pipenv создаёт окружение на основе Pipfile. Установка:
pip install pipenv
Создание окружения для проекта:
cd project
pipenv install
Активация:
pipenv shell
Установка конкретного пакета:
pipenv install flask
Pipenv автоматически создаёт виртуальное окружение в скрытой папке и генерирует Pipfile.lock для воспроизводимости.
Дополнительные примеры использования виртуальных окружений
1. Создание окружения с явным указанием версии Python (venv + pyenv)
Если в системе установлено несколько версий Python через pyenv, venv может использовать конкретную:
pyenv install 3.9.7
pyenv local 3.9.7
python3.9 -m venv myenv
Результат: окружение создаётся с Python 3.9.7 независимо от версии по умолчанию.
2. Установка пакетов из requirements.txt с учётом зависимостей
python3 -m venv myenv
source myenv/bin/activate
pip install -r requirements.txt
Файл requirements.txt:
requests==2.31.0
flask==2.3.3
numpy==1.24.3
Вывод (пример):
Collecting requests==2.31.0 Downloading requests-2.31.0-py3-none-any.whl (62 kB) ... Successfully installed requests-2.31.0 flask-2.3.3 numpy-1.24.3
3. Использование параметра --system-site-packages для доступа к системным пакетам
python3 -m venv --system-site-packages myenv
source myenv/bin/activate
pip list
При этом в окружении будут видны пакеты, установленные в системе. Подходит для быстрого прототипирования, но может нарушить изоляцию.
4. Создание окружения в нестандартной директории
mkdir -p ~/.virtualenvs
python3 -m venv ~/.virtualenvs/myproject
source ~/.virtualenvs/myproject/bin/activate
Папка окружения размещается в скрытом каталоге, а проект остаётся чистым.
5. Скрипт активации и деактивации в bash-скриптах
#!/bin/bash
cd /home/user/project
if [ -d "venv" ]; then
source venv/bin/activate
python main.py
deactivate
else
echo "Окружение не найдено"
fi
Позволяет автоматически запускать проект с активированным окружением.
6. Использование venv внутри контейнера Docker
Dockerfile:
FROM ubuntu:22.04
RUN apt update && apt install -y python3 python3-venv python3-pip
WORKDIR /app
COPY . .
RUN python3 -m venv /opt/venv && . /opt/venv/bin/activate && pip install -r requirements.txt
CMD ["/opt/venv/bin/python", "app.py"]
Образ содержит изолированное окружение внутри контейнера.
7. Сравнение virtualenv и venv: создание с предустановленными setuptools и wheel
python3 -m venv --without-pip myenv # окружение без pip (может быть нужно для отладки)
virtualenv --no-setuptools myenv # virtualenv без setuptools
Результат: в папке myenv/bin отсутствуют pip и setuptools. Установить их можно вручную:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
8. Создание окружения с форсированной переустановкой pip внутри него
python3 -m venv --clear myenv # очистка существующего окружения
python3 -m venv --upgrade-deps myenv # обновление pip и setuptools до последних версий
Полезно при проблемах с устаревшим pip.
9. Получение полного списка путей интерпретатора в окружении
source myenv/bin/activate
python -c "import sys; print('\n'.join(sys.path))"
Вывод (пример):
/home/user/project/myenv/lib/python3.10/site-packages /home/user/project/myenv/lib/python3.10 ... /usr/lib/python3.10
Показывает, какие каталоги используются для импорта модулей.
10. Удаление окружения и проверка его статуса
deactivate # если окружение активно
rm -rf myenv
python3 -m venv myenv # создание заново