272 Глава 8 • Питоновские методы повышения
производительности
Эта команда за одну минуту создаст новую папку
venv
в текущем каталоге,
а также заполнит ее базовой средой Python 3:
$ ls venv/
bin Include Lib pyvenv.cfg
Если вы проверите активную версию
pip
(командой
which
), то увидите,
что она по-прежнему указывает на глобальную среду, в моем случае
/usr/
local/bin/pip3
:
(venv) $ which pip3
/usr/local/bin/pip3
Это означает, что если установить пакеты сейчас, то они по-прежнему
окажутся в глобальной среде Python. Одного создания папки виртуальной
среды недостаточно — вам нужно явным образом активировать новую
виртуальную среду, чтобы последующие выполнения команды
pip
ука-
зывали на нее:
$ source ./venv/bin/activate
(venv) $
Выполнение команды
activate
конфигурирует текущий сеанс вашей
оболочки, чтобы вместо этого использовать Python и команды
pip
из
виртуальной среды
1
.
Обратите внимание на то, как это изменило вид подсказки в строке
команд ной оболочки, и теперь она содержит название активной вирту-
альной среды в круглых скобках:
(venv)
. Давайте проверим, какой ис-
полняемый файл
pip
теперь активен:
(venv) $ which pip3
/Users/dan/my-project/venv/bin/pip3
Как видите, выполнение команды
pip3
теперь будет запускать ту версию,
которая находится в виртуальной среде, а не глобальной. То же касается
1
В Windows команда
activate
выполняется напрямую, то есть ее не нужно загружать
вместе с источником.
8 .2 . Изоляция зависимостей
проекта при помощи Virtualenv 273
и исполняемого файла интерпретатора Python. Выполнение
python
из
командной строки теперь также загрузит интерпретатор из папки
venv
:
(venv) $
which python
/Users/dan/my-project/venv/bin/python
Обратите внимание: она по-прежнему представляет собой «чистую доску»,
абсолютно пустую среду Python. Выполнение команды
pip
list
покажет
почти пустой список установленных пакетов, который будет включать
только базовые модули, необходимые для поддержки
pip
как такового:
(venv) $ pip list
pip (9.0.1)
setuptools (28.8.0)
Давайте пойдем дальше и теперь установим пакет Python в виртуальную
среду. Для этого вам следует применить знакомую команду
pip
install
:
(venv) $
pip install schedule
Collecting schedule
Downloading schedule-0.4.2-py2.py3-none-any.whl
Installing collected packages: schedule
Successfully installed schedule-0.4.2
Здесь вы заметите два важных изменения. Во-первых, для выполнения
этой команды вам больше не будут нужны права доступа администра-
тора. И во-вторых, инсталляция или обновление пакета с активной вир-
туальной средой означают, что все файлы окажутся в подпапке каталога
виртуальной среды.
По этой причине программные средства, от которых зависит ваш проект,
будут физически отделены от всей другой среды Python в вашей системе,
включая глобальную. Практически вы получаете клон среды выполнения
Python, который предназначен только для одного проекта.
Еще раз выполнив
pip
list
, вы увидите, что библиотека
schedule
была
успешно установлена в новую среду:
(venv) $ pip list
pip (9.0.1)
274 Глава 8 • Питоновские методы повышения производительности
schedule (0.4.2)
setuptools (28.8.0)
Если запустить сеанс интерпретатора Python командой
python
или вы-
полнить им автономный файл
.py, то он будет использовать интерпретатор
Python и зависимости, установленные в эту виртуальную среду, — при
условии, что эта среда по-прежнему активна в текущем сеансе оболочки.
Но как снова деактивировать или «покинуть» виртуальную среду? Ана-
логично команде
activate
, существует команда
deactivate
, которая воз-
вращает вас назад к глобальной среде:
(venv) $ deactivate
$ which pip3
/usr/local/bin
Использование виртуальных сред поможет сохранить вашу систему
лаконичной, а ваши зависимости Python аккуратно организованными.
В качестве практической рекомендации: все ваши проекты Python долж-
ны использовать виртуальные среды, чтобы отделять их зависимости от
других и избегать конфликтов версий.
Понимание и использование виртуальных сред также направит вас по
правильному пути использования более продвинутых методов управле-
ния зависимостями, таких как определение зависимостей проекта при
помощи
файлов
requirements.txt
.
Если вы ищете материал с глубоким изложением этой темы и с дополни-
тельными советами по поводу производительности, обратитесь к моему
Кур-
Do'stlaringiz bilan baham: