Создание и использование виртуальных сред в Python3
Модуль venv обеспечивает поддержку создания «облегченных виртуальных сред«. Каждая виртуальная среда имеет свой собственный двоичный файл Python и может иметь собственный независимый набор установленных пакетов Python в своих каталогах.
Изменено в Python 3.11: Когда создаются новые виртуальные среды Python, то для для определения путей внутри среды venv используется схема установки sysconfig . Когда Python работает в виртуальной среде, по умолчанию используется та же схема установки. Это означает, что нижестоящие дистрибьюторы могут изменить схему установки по умолчанию, без изменения поведения самих виртуальных сред. Сторонний код, который также может создавать новые виртуальные среды, должен делать то же самое.
Если в операционной системе по умолчанию используется Python 3 и не нравится функциональность встроенного модуля venv , то модуль virtualenv можно установить как скомпилированный пакет операционной системы.
# Для пользователей Ubuntu, Debian $ sudo apt install python3-virtualenv $ virtualenv --version virtualenv 20.0.17 from /usr/lib/python3/dist-packages/virtualenv/__init__.py
Виртуальная среда — это среда Python, в которой установленный в ней интерпретатор Python, библиотеки и скрипты изолированы от других виртуальных сред и изолированы от любых библиотек, установленных в Python как часть операционной системы.
Обычные инструменты установки, такие как setuptools и pip работают в виртуальных средах как и ожидается. Другими словами, когда виртуальная среда активна, то пакеты Python устанавливаются в виртуальную среду без необходимости явно указывать это.
Когда виртуальная среда активна, т. е. работает интерпретатор Python виртуальной среды, атрибуты sys.prefix и sys.exec_prefix указывают на базовый каталог виртуальной среды, тогда как sys.base_prefix и sys.base_exec_prefix останутся указывать на базовую установку Python, ту, из которой была создана виртуальная среда. Если виртуальная среда не активна, то sys.prefix совпадает с sys.base_prefix , а sys.exec_prefix будет совпадать с sys.base_exec_prefix , все они указывают на установку Python не в виртуальной среде.
Когда виртуальная среда активна, любые параметры, которые изменяют путь установки, будут игнорироваться во всех файлах конфигурации distutils , чтобы предотвратить случайную установку проектов вне виртуальной среды.
Работая в командной оболочке, пользователи могут активизировать виртуальную среду, запустив сценарий активации в каталоге исполняемых файлов виртуальной среды source /bin/activate , который добавляет каталог виртуальной среды для исполняемых файлов в переменную окружения PATH для работающей оболочки.
Создание виртуальной среды в OS Linux/Windows.
Создание виртуальной среды в OS Linux выполняется с помощью команды venv :
# в виртуальную среду установится системная версия Python3 # т.е. версия установленная по умолчанию в вашей системе $ python3 -m venv /path/to/new/virtual/environment --prompt Python3.9
Представленная выше команда создает целевой каталог environment , создавая все не существующие родительские каталоги. После этого python поместит в него файл pyvenv.cfg с ключом, который будет указывать на ту версию Python, для которой запущена эта команда. Она также создает подкаталог bin в Unix или Scripts в Windows, содержащий копию/символическую ссылку двоичных файлов Python в зависимости от платформы или аргументов, используемых во время создания среды. Вышеуказанная команда также создает изначально пустой подкаталог lib/pythonX.Y/site-packages в Unix, в Windows это Lib\\site-packages . Если указан существующий каталог виртуальной среды, то он будет использован повторно.
Если, например, вы собрали Python3.11 из исходников в папку /opt/python-3.11.0/ и хотите именно его поставить в виртуальную среду, то команда будет выглядеть следующим образом:
# в виртуальную среду установится версия Python # расположенная по пути /opt/python-3.11.0/bin/python3.11 $ /opt/python-3.11.0/bin/python3.11 -m venv ~/.python3.11.0 --prompt Python3.11
Представленная выше команда установит версию Python, который был собран из исходников в каталоге /opt/python-3.11.0/ , в папку виртуальной среды ~/.python3.11.0 . Папка виртуальной среды будет расположена в скрытой (точка впереди названия папки) домашней ( ~/ ) директории пользователя. Параметр —prompt Python3.11 создаст, после активации, дополнительную подсказку о том, что вы находитесь в виртуальной среде Python3.11.
Активировать установленный Python в такой виртуальной среде можно командой:
$ source ~/.python3.11.0/bin/activate # в скобках - та самая подсказка, о которой говорилось выше (Python3.11) :~$
Установить дополнительные модули/пакеты для этой виртуальной среды можно только если она (виртуальная среда) активирована. Например, установка фреймворка pytest будет выглядеть следующим образом:
# команда установит модуль `pytest` # в папку виртуальной среды ~/.python3.11.0 (Python3.11) :~$ python3 -m pip install -U pytest
Для создания виртуальной среды в OS Windows, необходимо вызвать команду venv следующим образом:
c:\>c:\Python39\python -m venv c:\path\to\myenv --prompt Python3.9
В качестве альтернативы, если настроены переменные PATH и PATHEXT для установки Python:
c:\>python3 -m venv c:\path\to\myenv
Для venv может быть задано несколько путей, и в этом случае будет создана идентичная виртуальная среда в соответствии с заданными параметрами для каждого указанного пути.
После создания виртуальной среды ее можно «активировать» с помощью сценария, расположенном каталоге виртуальной среды. Вызов сценария зависит от платформы:
Примечание к таблице: venv должен быть заменен путем к каталогу, содержащему виртуальную среду:
Не нужно специально активировать среду если сценарий запускается с указанием полного пути до интерпретатора Python, установленного в виртуальную среду. Активация просто добавляет каталог виртуальной среды к пути интерпретатора Python тем самым давая возможность запускать сценарии не используя полный путь.
Вы можете «деактивировать» виртуальную среду, набрав команду deactivate в своей оболочке. Точный механизм зависит от платформы и является внутренней деталью реализации. Обычно используется скрипт или функция оболочки.
Примеры:
Установка виртуальной среды в директорию env :
$ python3 -m venv ~/env
Активация виртуальной среды env :
$ source ~/env/bin/activate (env) docs-python@IdeaCentre:~$
Установка пакетов в виртуальную среду env :
(env) $ python3 -m pip install pymysql # или (env) $ pip install pymysql
Выполнение сценариев в виртуальной среде env :
(env) $ python ~/env/test.py
Деактивация виртуальной среды:
(env) $ deactivate # произойдет выход из виртуального окружения $
Не нужно специально активировать среду если сценарий запускается с указанием полного пути до интерпретатора Python:
$ ~/env/bin/python3 ~/env/test.py
Если команда python3 -m venv запускается с опцией -h, то можно увидеть доступные опции:
$ python3 -m venv -h usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] [--prompt PROMPT] ENV_DIR [ENV_DIR . ] . .
- ENV_DIR — Каталог для создания виртуальной среды.
- -h , —help — показать справочное сообщение и выйти,
- —system-site-packages — предоставляет виртуальной среде доступ к системным пакетам site-packages ,
- —symlinks — при установке виртуальной среды создает символические ссылки вместо копирования файлов,
- —copies — при установке виртуальной среды копирует файлы вместо создания символических ссылок,
- —clear — перед созданием виртуальной среды удаляет содержимое каталога, если он уже существует,
- —upgrade — Обновите каталог виртуальной среды, чтобы использовать установленную версию Python,
- —without-pip — пропускает установку или обновление pip в виртуальной среде (pip загружается по умолчанию),
- —prompt PROMPT — предоставляет альтернативный префикс приглашения для этой среды.
Примечания:
- Хотя в Windows поддерживаются символические ссылки, они не рекомендуются. Особо следует отметить, что двойной щелчок по python.exe в проводнике файлов разрешит символическую ссылку и проигнорирует виртуальную среду.
- В Microsoft Windows может потребоваться включить сценарий Activate.ps1 , установив политику выполнения для пользователя. Вы можете сделать это, введя следующую команду PowerShell: PS C: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Созданный файл pyvenv.cfg также содержит ключ include-system-site-packages , для которого установлено значение true , если venv запускается с параметром —system-site-packages , в противном случае значение будет false .
Если не указана опция —without-pip , то будет вызываться модуль ensurepip для начальной загрузки pip в виртуальную среду.
Другая версия python в виртуальном окружении
Всем ку!) Ситуация возникла следующая: в системе стоит python 3.5.3, и он не обновляется, потому что в репозитории stable это последняя версия, пусть так и остается. Но в виртуальное окружение хотел бы версию python 3.6.4. Возможно ли это сделать так, чтобы ничего не сломать в системе? Если да, то как это сделать грамотно?
a-lexx
11.01.18 12:44:51 MSK
slaykovsky ★★★
( 11.01.18 12:46:38 MSK )

Можно иметь несколько версий питона рядом без проблем.
При создании virtualenv можно указать путь к любому интерпретатору, даже если он собран куда-нить в /opt
pawnhearts ★★★★★
( 11.01.18 13:04:08 MSK )
Ответ на: комментарий от pawnhearts 11.01.18 13:04:08 MSK

a-lexx
( 11.01.18 13:35:23 MSK ) автор топика
Ответ на: комментарий от a-lexx 11.01.18 13:35:23 MSK

Я у себя на debian просто скомпилировал с —prefix=/opt/python36
при создание venv указываешь интерпретатор оттуда
pawnhearts ★★★★★
( 11.01.18 14:04:57 MSK )
Ответ на: комментарий от pawnhearts 11.01.18 14:04:57 MSK

Такой вопрос, а можно с помощью pip обновить сам питон?
a-lexx
( 11.01.18 15:26:35 MSK ) автор топика
Ответ на: комментарий от a-lexx 11.01.18 15:26:35 MSK
не надо глупостями заниматься
в дебиане есть два разных пакета: python3.5 и python3.6. Поставь оба, при этом python3 у тебя будет мапиться на python3.5, а для создания окружения с python3.6 указывай явно:
virtualenv -p python3.6 ./venv/
alpha ★★★★★
( 11.01.18 15:44:34 MSK )
Ответ на: комментарий от alpha 11.01.18 15:44:34 MSK

3.6 только в unstable и testing
можно с помощью pip обновить сам питон
pawnhearts ★★★★★
( 11.01.18 15:53:06 MSK )
Последнее исправление: pawnhearts 11.01.18 15:54:35 MSK (всего исправлений: 1)
Ответ на: комментарий от alpha 11.01.18 15:44:34 MSK

Если я временно добавлю тестовый репозиторий в sources.list, не поставит ли система python 3.6 так, что затрет python 3.5?
a-lexx
( 11.01.18 16:13:30 MSK ) автор топика
Ответ на: комментарий от pawnhearts 11.01.18 14:04:57 MSK

Я у себя на debian просто скомпилировал с —prefix=/opt/python36
Сорцы где взяли? С зависимостями нормально все было?
a-lexx
( 11.01.18 16:21:13 MSK ) автор топика
Ответ на: комментарий от a-lexx 11.01.18 16:13:30 MSK
теоретически нет, на практике я так делаю на fedora, а на debian не пробовала, возможны нюансы
Судя по dpkg -L пожалуй лучше ставить python3.6-minimal, а не python3.6, так как он не содержит /usr/lib/python3 и прочих shared-файлов.
# dpkg -L python3.5 /. /usr /usr/bin /usr/bin/2to3-3.5 /usr/bin/pydoc3.5 /usr/bin/pygettext3.5 /usr/lib /usr/lib/python3 /usr/lib/python3/dist-packages /usr/lib/python3.5 /usr/lib/python3.5/lib-dynload /usr/share /usr/share/applications /usr/share/applications/python3.5.desktop /usr/share/doc /usr/share/doc/python3.5 /usr/share/doc/python3.5/ACKS.gz /usr/share/doc/python3.5/NEWS.gz /usr/share/doc/python3.5/README.Debian /usr/share/doc/python3.5/README.gz /usr/share/doc/python3.5/changelog.Debian.gz /usr/share/doc/python3.5/copyright /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/python3.5 /usr/share/man /usr/share/man/man1 /usr/share/man/man1/2to3-3.5.1.gz /usr/share/man/man1/pdb3.5.1.gz /usr/share/man/man1/pydoc3.5.1.gz /usr/share/man/man1/pygettext3.5.1.gz /usr/share/man/man1/pysetup3.5.1.gz /usr/share/pixmaps /usr/share/pixmaps/python3.5.xpm /usr/bin/pdb3.5 /usr/share/doc/python3.5/changelog.gz
# dpkg -L python3.5-minimal /. /usr /usr/bin /usr/bin/python3.5 /usr/bin/python3.5m /usr/share /usr/share/binfmts /usr/share/binfmts/python3.5 /usr/share/doc /usr/share/doc/python3.5-minimal /usr/share/doc/python3.5-minimal/README.Debian /usr/share/doc/python3.5-minimal/changelog.Debian.gz /usr/share/doc/python3.5-minimal/copyright /usr/share/man /usr/share/man/man1 /usr/share/man/man1/python3.5.1.gz /usr/share/man/man1/python3.5m.1.gz
Установка Python 3.9 и виртуального окружения (VENV)
![]()
Для примера возьмём Ubuntu 18, там установлена нативная версия Python 3.6.9 по умолчанию. Проверим версию установленного пакета командой:
python3 --version

Если вы планируете запускать на сервере несколько разных программ Python, то лучше использовать виртуальное окружение, чтобы избежать проблем с производительностью и совместимостью. Использование VENV позволит установить разные пакеты PIP и не нагружать ими нативную версию Python. Подробнее об этом рассказываем в одном из следующих разделов.
Запускаем обновление репозиториев и пакетов операционной системы. На боевом сервере делать это не рекомендую, в этом случае просто обновим репозитории ( apt update ):
apt update && apt upgrade -y
Далее установим пакет для управления независимыми репозиториями и добавим сам репозиторий Python:
apt install software-properties-common -y && add-apt-repository ppa:deadsnakes/ppa
Подтверждаем добавления репозитория нажатием кнопки Enter .
После чего можно установить на сервер любую доступную версию Python, подходящую для ваших задач. На момент написания статьи последняя доступная стабильная версия из репозитория — Python 3.9.
Проверить какие версии доступны для установки можно командой:
apt-cache policy python3.9
#Вместо 3.9 можно указать нужную версию.

Установим Python 3.9, для этого выполняем команду:
apt install python3.9 -y
Для проверки запустим интерактивную сессию Python:
python3.9 print("Hello, World!")

Для выхода из интерактивной сессии нажимаем Ctrl+D , также выйти можно с помощью команды quit() или exit() .
Установка Python на Debian
На Debian 11 для установки Python3.9.2 достаточно будет выполнить команду:
apt install software-properties-common -y
Для операционных систем Debian 9 и 10 процесс установки отличается Python 3.9 отличается, будем собирать пакеты скачанные с официального сайта. Но не волнуйтесь, в этом нет ничего сложного.
Обновляем репозитории и устанавливаем обновления для нового сервера, для уже работающего обновим только репозитории ( apt update ):
apt update && apt upgrade -y
Устанавливаем службы которые необходимы для сборки:
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev -y
Загружаем архив с нужной версией и распакуем его:
wget https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tgz && tar -xf Python-3.9.12.tgz
Посмотреть доступные для загрузки архивы и скопировать ссылку можно на официальном сайте
Перейдём в директорию с Python:
cd /root/Python-3.9.12/
#В моём случае работаю под пользователем root и архив был загружен/распакован в корневую директорию этого пользователя /root/
И запустим сценарий конфигурации:
./configure --enable-optimizations
После чего соберём пакет командой:
make -j 2
#Ключ -j указывает на количество одновременно выполняемых операций, здесь можно указать число равное количеству ядер процессора для вашего сервера чтобы ускорить сборку
Когда процесс будет завершён запускаем финальную команду:
make altinstall
Готово, на сервер установлена альтернативная версия Python 3.9.12
Для проверки запустим интерактивную сессию Python.
Управление альтернативными версиями
Для управления установленными версиями Python и выбора основной используем службу update-alternatives .
Хочу предупредить, что выполнять такие действия нежелательно по причине того, что системные программы написаны и протестированы именно для той версии Python, которая была установлена по умолчанию, а обновление основной версии может нарушить работу каких-либо служб. Для подобных задач лучше использовать виртуальное окружение Python VENV, об этом в следующем разделе.
Если вы всё же приняли решение обновить нативную версию, то добавляем установленные на сервере версии как альтернативные:
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
# /usr/bin/python3.6 — путь до установленной версии в операционной системе.
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2
#Здесь принцип тот же, путь до установленной версии и приоритет 2 .
#Для Debian путь до установленной альтернативной версии отличается /usr/local/bin/python3.9
update-alternatives --list python3

Для установки альтернативной версии как основной выполняем команду и выбираем нужный номер версии, который указан в колонке Selection :
update-alternatives --config python3


Установка и начало работы с Python virtualenv (VENV)
Аббревиатура VENV расшифровывается как «virtual environment», что в переводе означает «виртуальная среда». Размещение проектов в изолированной виртуальной среде позволяет управлять абсолютно разными проектами Python на одном сервере. Проекты могут использовать разный набор библиотек и разную версию Python, при этом для каждой отдельной виртуальной среды можно использовать собственные настройки.
Выполним установку venv:
apt install python3-venv -y
Для установки venv на альтернативную версию для Ubuntu используем команду следующего вида:
apt install -y python3.9-venv -y
Создадим директорию, в которой будет находится наше виртуальное окружение, и сразу перейдём в неё:
mkdir fvds && cd fvds
Можно использовать любую удобную директорию.
Активируем виртуальную среду:
python3 -m venv fvds_env или python3.9 -m venv fvds_env
Где « fvds_env » название нашего проекта.
Активируем созданную среду командой:
source /путь_до_окружения/bin/activate
#В моём случае получилась вот такая команда: source /root/fvds/fvds_env/bin/activate
Когда виртуальная среда стала активна, то в командной строке перед именем пользователя появляется префикс созданной среды:

При работе в venv вы можете использовать команды python и pip вместо python3 и pip3 соответственно.
Для выхода из окружения используем команду:
deactivate
Для управления большим количеством окружений есть замечательный инструмент virtualenvwrapper . Более подробную информацию можно найти на официальном сайте этого программного обеспечения.
Установка менеджера пакетов PIP для Debian и Ubuntu
Для решения большинства задач в Python уже созданы библиотеки, и вам не требуется писать с нуля модули, например, для взаимодействия с базами данных или веб-сервером. В свободный доступ менеджера пакетов PIP добавлено более 382 тысяч пакетов, что само по себе является впечатляющей цифрой. Сложно вообразить, какое количество строк кода уже было написано и какие возможности нам открывает этот инструмент.
Приступим к установке менеджера PIP для управления библиотеками Python, которые не входят в стандартную сборку:
apt install python3-pip -y
Если на сервере есть альтернативные версии Python, которые вы используете, то выполняем обновление PIP для этой версии:
python3.9 -m pip install --upgrade pip
#Вместо 3.9 можно указать нужную версию
Рассмотрим синтаксис утилиты:
pip3 [команда] [опции] [имя пакета]
Вот набор основных команд, которые пригодятся при работе с PIP:
- install — установить пакет.
- install -U — обновление пакетов.
- uninstall — удалить пакет.
- search — найти пакет.
- list — список установленных пакетов.
- show — просмотр информации о установленном пакете.
Для примера установим пакет aiogram :
pip3 install aiogram
Проверяем наличие библиотеки для основной версии командой:
pip3 list | grep aiogram или pip3 show aiogram
Для установки библиотек на альтернативную версию Python используем команду следующего вида:
python3.9 -m pip install aiogram
Проверим, установилась ли эта библиотека на альтернативную версию:
python3.9 -m pip list | grep aiogram или python3.9 -m pip show aiogram
Найти название нужной библиотеки, посмотреть документацию к ней и получить команду для её установки всегда можно на официальном сайте pypi.org
Использование requirements.txt
Если потребуется масштабировать вашу программу, перенести её на другой сервер или развернуть проект из GitHub, не устанавливая каждый пакет PIP, который требуется для запуска, отдельно — всё это можно реализовать с помощью встроенного функционала. Все пакеты можно сохранить в файл requirements.txt (такое название необязательно, но является общепринятым стандартом), а затем развернуть их на сервере или в виртуальном окружении VENV.
Чтобы сохранить информацию о всех установленных пакетах PIP, используем команду:
pip3 freeze > requirements.txt
Для установки пакетов, которые были сохранены в файл, команда следующая:
python3 -m pip install -r requirements.txt или pip3 install -r requirements.txt
Запуск скриптов Python при старте сервера через Cron
Большинство начинающих пользователей сталкиваются с вопросом: «Как автоматизировать запуск программы на Python и добавить скрипт автозагрузку?»
Самый простой способ добавить задачу в Cron.
Если вы используете venv, то задача, добавленная в планировщик, будет выглядеть вот таким образом:
@reboot source /путь_до_окружения/bin/activate && python /путь_до_скрипта.py
Запуск скрипта без виртуального окружения:
@reboot /usr/bin/python3 /путь_до_скрипта.py
Проверить, правильно ли вы добавили команду, можно, запустив скрипт по путям, которые добавлены в планировщик Cron. Чтобы точно убедиться, что скрипт запускается после перезагрузки, давайте проверим это на практике и отправим сервер на перезагрузку командой:
reboot
Если ваш проект запустился после загрузки операционной системы, то всё работает. В ином случае смотрим логи Cron и ищем ошибку.
Python не меняет версию через venv
Я пытался поменять версию через venv. Ничего не выходило. В итоге я удалил ненужную версию, а она все равно осталась.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Разница между venv через терминал и venv в Pycharm
Есть ли разница — создавать виртуальное окружение через venv в терминале, а потом в pycharm.
Python Ubuntu Supervisor Venv
Есть сервер на ubuntu, на нем бот на питоне если запускать через 2 команды source.
Не активируется виртуальное окружение python windows 7 (venv, env, pip)
Здравствуйте! столкнулся с такой проблемой: не активируется виртуально окружение, которое ранее.
видимо машинное обучение с порога отсеивает
| Меню пользователя @ Welemir1 |
| Читать блог |
Регистрация: 25.02.2021
Сообщений: 21
По идее можно нажать на шестеренку справа от выпадающего списка. Затем «Show All» там отобразится список всех виртуальных окружений и интерпретаторов. После чего ненужный интерпретатор можно будет удалить. И добавить заново. По идее версия обновится. Похоже PyCharm где-то закешировал версию.
Также можно удалить папку .idea чтобы. Но это нужно делать если понимаете, к чему это приведет — слетят все настройки проекта. Я бы это делал только в крайнем случае.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Не показывает версию Python
Чтобы убедиться, что Python теперь доступен, перезагрузите ком-пьютер, запустите командную строку.
Сменить версию Python
имеется сервер с AWS Linux. На нем уже установлен Python 2.7. Но мне желательно иметь версию 3.6.

Не находит Python и не показывает версию
Привет всем, такой вопрос, помогайте новичку. Установила Python 3.8 с офиц сайта. В командной.
Как поменять версию Python
У меня стояла версия 3.6, решил поменять на 3.5 чтобы Pillow установить. Скачал Python 3.5.0.
Как установить старую версию Python 2.7?
Есть одно приложение, которое, писалось на 2.7.6 и на других версиях не запускается. При попыте.
