Виртуальные окружения#

Виртуальные окружения:

  • позволяют изолировать различные проекты друг от друга;

  • пакеты, которые нужны разным проектам, находятся в разных местах – если, например, в одном проекте требуется пакет версии 1.0, а в другом проекте требуется тот же пакет, но версии 3.1, то они не будут мешать друг другу;

  • пакеты, которые установлены в виртуальных окружениях, не перебивают глобальные пакеты.

Встроенный модуль venv#

Начиная с версии 3.5, в Python рекомендуется использовать модуль venv для создания виртуальных окружений:

$ python3.11 -m venv ~/venv/pyneng

Вместо python3.11 может использоваться python или python3, в зависимости от того, как установлен Python 3.11. Эта команда создаёт указанный каталог и все необходимые каталоги внутри него, если они не были созданы.

Команда создаёт следующую структуру каталогов:

$ ls -ls ~/venv/pyneng
total 16
4 drwxr-xr-x 2 vagrant vagrant 4096 Aug 21 14:50 bin
4 drwxr-xr-x 2 vagrant vagrant 4096 Aug 21 14:50 include
4 drwxr-xr-x 3 vagrant vagrant 4096 Aug 21 14:50 lib
4 -rw-r--r-- 1 vagrant vagrant   75 Aug 21 14:50 pyvenv.cfg

Для перехода в виртуальное окружение надо выполнить команду:

$ source ~/venv/pyneng/bin/activate

Для выхода из виртуального окружения используется команда deactivate:

$ deactivate

Подробнее о модуле venv в документации.

Установка пакетов#

Например, установим в виртуальном окружении пакет simplejson.

(pyneng)$ pip install simplejson
...
Successfully installed simplejson
Cleaning up...

Если перейти в интерпретатор Python и импортировать simplejson, то он доступен и никаких ошибок нет:

(pyneng)$ python
>>> import simplejson
>>> simplejson
<module 'simplejson' from '/home/vagrant/venv/pyneng/lib/python3.11/site-packages/simplejson/__init__.py'>
>>>

Если выйти из виртуального окружения и попытаться сделать то же самое, то такого модуля нет:

(pyneng)$ deactivate

$ python
>>> import simplejson
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'simplejson'
>>>