В unix-системе питоновские пакеты совсем не обязательно нужно ставить в системные каталоги (в /usr/, например). Благодаря virtualenv, пакеты можно установить в любой каталог, инициализировать локально окружение в терминале через специальный скрипт и дальше пользоваться всеми установленными в том каталоге библиотеками и программами. Локальный набор пакетов очень удобен для разработчика, так как позволяет на одной системе переключаться между разными их версиями.
В статье я описываю не только концепт, но и всю процедуру подготовки локального окружения. Сразу же уточнение: всё работает только в терминале, то есть вы запускаете терминал, «активируете» в нём нужный каталог с пакетами и дальше в этом терминале работаете. Базовая операционная система — linux, *bsd или mac os x. Windows я не рассматриваю.
Итак, нам понадобится установленный системно python3. Для линукса он ставится из пакетов вашего репозитория, для макоси — скачивается с офсайта https://www.python.org/downloads/mac-osx/. На данный момент последняя версия — 3.5.2, её и ставим. В принципе, версия из brew тоже сойдёт.
Локальный каталог, куда мы всё будем ставить, — ~/.local-pyvenv
, я его делаю скрытым, так как он нам в явном виде практически никогда не понадобится, плюс мешаться в списке файлов не будет.
Для начала удалим этот каталог на всякий случай, если он существует.
[user@shell]$ rm -rf ~/.local-pyvenv
Дальше нам нужно установить virtualenv. В случае ubuntu/debian это можно сделать командой apt install virtualenv
, для макоси пакет можно установить системно через pip, однако мы пойдём другим путём и установим всё локально.
[user@shell]$ pip3 install -t /tmp/ttt virtualenv
[user@shell]$ python3 /tmp/ttt/virtualenv.py ~/.local-pyvenv
[user@shell]$ rm -rf /tmp/ttt
Каталог, куда мы временно поставили virtualenv (/tmp/ttt
), мы удаляем, он нам больше не понадобится.
Теперь у нас есть готовое локальное окружение с «установленным» питоном, перед началом использования его нужно «активировать». Активация по сути переписывает переменные окружения типа $PATH и добавляет туда пути из ~/.local-pyvenv
с более высоким приоритетом, чем системный. Вот как это делается:
[user@shell]$ source ~/.local-pyvenv/bin/activate
(.local-pyvenv) [user@shell]$
Обратите внимание, в приглашении терминала появилась новая строка (.local-pyvenv)
, она вам всегда будет напоминать, что вы находитесь в «активированном» окружении и часть программ и библиотек теперь будет в первую очередь искаться в каталоге .local-pyvenv
, а не в системных. Чтобы убедиться в этом, запустите такой код:
[user@shell]$ which python3
/Users/sigsergv/.local-pyvenv/bin/python3
В активированном окружении теперь можно ставить пакеты и программы через pip3 и они все будут ставиться не в системные каталоги, а в ~/.local-pyvenv
. При этом вы можете свободно находиться в любом каталоге, а не в ~/.local-pyvenv
.
В дальнейшем сценарий работы такой:
- Запускаем новую сессию в терминале
- Активируем рабочее окружение командой
source ~/.local-pyvenv/bin/activate
- Работаем как обычно
«Деактивировать» окружение можно из текущей сессии командой deactivate
, она возвращает все изменённые переменные окружения на место.