Модуль venv: создание виртуальной среды в Python
В этом руководстве вы узнаете о виртуальных средах Python и о том, как использовать модуль venv для создания виртуальной среды.
- Зачем вам нужны виртуальные среды Python?
- Что такое виртуальная среда Python?
- Использование модуля venv для создания виртуальной среды
Зачем вам нужны виртуальные среды Python?
Python при установке сохраняет все системные пакеты в указанной папке. Обычно большинство системных пакетов располагаются в подпапках по пути, указанному в sys.prefix. Чтобы найти этот путь, вы можете импортировать модуль sys и отобразить его следующим образом:
import sys print(sys.prefix)
Это может выглядеть примерно так:
C:\\Python
Когда вы используете pip для установки сторонних пакетов, Python сохраняет эти пакеты в другой папке, указанной функцией site.getsitepackges():
import site print(site.getsitepackages())
Он возвращает что-то вроде этого:
['C:\\Python', 'C:\\Python\\lib\\site-packages']
Ничего страшного, если в ваших проектах используются только стандартные библиотеки Python. Однако это будет проблемой, если в проектах используются сторонние пакеты.
Предположим, у вас есть два проекта, которые используют разные версии библиотеки. Поскольку существует только одно место для хранения сторонних пакетов, вы не можете хранить разные версии одновременно.
Обходной путь заключается в том, что вы можете использовать команду pip для переключения между версиями путем установки/удаления пакетов. Однако это займет много времени и не очень хорошо масштабируется. Именно здесь в игру вступают виртуальные среды.
Что такое виртуальная среда Python?
Python использует виртуальное окружение для создания изолированной среды для каждого проекта. Другими словами, у каждого проекта будет свой каталог для хранения сторонних пакетов. Если у вас есть несколько проектов, использующих разные версии пакета, вы можете хранить их в отдельных виртуальных средах.
Python включает модуль виртуальной среды(venv) в качестве стандартной библиотеки начиная с версии 3.3. Следовательно, чтобы использовать модуль venv, у вас должен быть Python 3.3 или новее.
Чтобы проверить версию Python, вы можете использовать следующую команду:
python --version
Использование модуля venv для создания виртуальной среды
В следующем примере показано, как создать новый проект в Windows, который использует виртуальную среду, созданную встроенным модулем venv.
- Сначала создайте новую папку для размещения проекта и виртуальной среды:
mkdir D:\test_env cd test_env
Затем создайте виртуальную среду с именем project_env внутри папки test_env:
python -m venv project_env
Приведенная выше команда создаст новую папку с именем project_env со всеми необходимыми инструментами и библиотеками для запуска программ Python.
Используйте следующую команду, чтобы проверить, где находится python.exe:
where python
Он вернет следующий путь, указывающий, что python.exe находится в папке установки:
C:\Python\python.exe
- Во-вторых, активируйте виртуальную среду, запустив файл active.bat в каталоге project_env/Scripts:
project_env\Scripts\activate
После выполнения вы увидите в терминале следующее:
(project_env) D:\test_env\project_env\Scripts>
Префикс(project_env) указывает, что вы находитесь в виртуальной среде project_env.
Теперь вы можете еще раз проверить, где находится python.exe:
where python
На этот раз он возвращает следующие пути:
D:\test_env\project_env\Scripts\python.exe C:\Python\python.exe
Первая строка показывает, что файл python.exe находится в папке project_env/Scripts. Это означает, что если вы запустите команду python в project_env, вместо C:\Python\python.exe будет выполнен D:\test_env\project_env\Scripts\python.exe.
- В-третьих, перейдите в папку D:\test_env, создайте новую папку проекта с именем web_crawler и перейдите в папку web_crawler:
cd.. cd.. mkdir web_crawler cd web_crawler
- В-четвертых, покажите пакеты, установленные в виртуальной среде project_env для проекта web_crawler:
pip list
Выход:
Package Version ---------- ------- pip 22.0.4 setuptools 58.1.0
Когда вы создали виртуальную среду project_env, модуль venv уже установил два пакета: pip и setuptools.
- В-пятых, установите пакет запросов в виртуальную среду:
pip install requests
Если вы отобразите все пакеты, установленные в виртуальной среде project_env, вы увидите пакет Requests и его зависимости:
Package Version ------------------ --------- certifi 2022.9.24 charset-normalizer 2.1.1 idna 3.4 pip 22.0.4 requests 2.28.1 setuptools 58.1.0 urllib3 1.26.12
- В-шестых, создайте файл require.txt:
pip freeze > requirements.txt
Содержимое файла require.txt будет выглядеть следующим образом:
certifi==2022.9.24 charset-normalizer==2.1.1 idna==3.4 requests==2.28.1 urllib3==1.26.12
Файл require.txt содержит все пакеты с версиями, установленными в виртуальной среде project_env, используемой для проекта.
Когда вы копируете проект на другой компьютер, вы можете запустить команду pip install, чтобы установить все пакеты, перечисленные в файле require.txt.
- В-седьмых, создайте файл main.py, который использует модуль Requests:
import requests response = requests.get('https://www.google.com') if response.status_code == 200: print(response.text)
Чтобы запустить файл main.py, вы можете использовать команду Python как обычно:
python main.py
Эта команда запускает python.exe из project_env и загружает пакеты, установленные в виртуальной среде project_env.
Чтобы деактивировать виртуальную среду, вы можете запустить команду деактивации:
deactivate
Она вернет следующее:
D:\test_env\web_crawler>
Теперь вы больше не видите префикс(project_env). Это означает, что вы не находитесь в виртуальной среде project_env.