Привет, Хабр! Меня зовут Дмитрий Алексеев, я Data Scientist и являюсь участником профессионального сообщества NTA. Сегодня расскажу как использовать python и Linux «в связке», и как это поможет облегчить вам жизнь.

Операционная система Linux получила большую популярность среди админов и разработчиков благодаря ряду преимуществ таким, как бесплатное распространение, наличие открытого исходного кода, низкие требования к вычислительным ресурсам.

Python интерпретатор предустановлен в большинстве дистрибутивов Linux. Согласно рейтингу TIOBE на текущий момент самым упоминаемым в поисковых запросах языком программирования является python. Python обладает низким порогом входа, но имеет большой спектр возможностей для применения.

Использование python и Linux «в связке» может сильно облегчить вам жизнь. Я расскажу о том, как настроить python в Linux под нужды своего проекта.

Определение виртуальной среды

Виртуальная окружение (или виртуальная среда) — это изолированная среда для проекта. Это «песочница», в рамках которой запускается приложение со своими версиями библиотек, обновление и изменение которых не затронет другие приложения, использующие те же библиотеки. Тем самым использование виртуальных сред позволяет избежать конфликтов версий.

Виртуальное окружение со всеми необходимыми настройками можно «передавать» вместе с вашим приложением. Так другому разработчику будет проще работать с вашим проектом.

Также библиотеки, которые необходимы только в одном проекте, можно подгрузить в виртуальное окружение и тем самым не засорять глобальное окружение.

Проверка версии Python

Как уже говорилось ранее, python предустановлен в большинстве дистрибутивов Linux. Я использовал версию Ubuntu 20.04.

Проверить текущую версию python можно с помощью команды: python3 -V.

Обновление пакетов

Вначале рассмотрим работу с python библиотеками в Linux.

Advanced Package Tool (apt) – это пакетный менеджер, позволяющий производить различные манипуляции с пакетами: устанавливать, удалять, обновлять, искать, загружать без установки. При этом все зависимости будут разрешаться автоматически.

Пакет – это архив, в котором содержатся бинарные и конфигурационные файлы, информация о том, куда их разместить в файловой системе и список действий по установке. В Linux python библиотеки являются пакетами.

В Linux есть список репозиториев, из которых происходит установка пакетов. Список хранится в текстовом файле /etc/apt/sources.list, а также в директории /etc/apt/sources.list.d/. При выполнении команды apt update, apt обращается к списку репозиториев и из каждого репозитория в списке получает информацию о пакетах, находящихся в нем. Вся эта информация сохраняется в операционной системе.

Если выходит новая версия библиотеки, то apt не узнает об этом, пока не будет обновлена информация в репозиториях. Поэтому, если установить пакет, предварительно не выполнив обновление, то будет установлена та версия пакета, информация о которой хранится в системе в данный момент.

Для обновления пакетов необходимо выполнить следующие две команды.

Первая команда: sudo apt update.

Вторая команда: sudo apt -y upgrade.

Флаг -y в команде обозначает автоматическое подтверждение запросов на установку.

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

Для работы с виртуальным окружением в Linux нужно установить пакет venv с помощью следующей команды: sudo apt install python3-venv.

Создание виртуальной среды в Linux

Создать виртуальное окружение можно командой python3 -m venv my_venv.

My_venv – название виртуального окружения.

Приведенная выше команда создает каталог с именем «my_venv» (а также родительские каталоги, которые ещё не существуют), содержащий менеджер пакетов pip, интерпретатор, скрипты и библиотеки.

С помощью команды ls -la можно увидеть файлы в текущей директории.

Если вы хотите создать папку с окружением в конкретной директории, то вместо названия окружения нужно указать путь к папке. Например, python3 -m venv ~/my_venv.

Далее перейду в созданный каталог и посмотрю содержимое созданной папки.

Файл pyvenv.cfg содержит ключ, который будет указывать на ту версию Python, для которой запущена эта команда. 

Каталог bin содержит копию/символическую ссылку двоичных файлов Python.

Каталог include включает в себя С-заголовки, компилирующие пакеты Python.

В каталог share входит python wheels. Python wheels — это формат готовых пакетов для Python, который помогает ускорить разработку программного обеспечения за счет сокращения количества операций компиляции. 

Каталог lib в виртуальной среде имеет такую же структуру, как каталог lib в глобальном окружении. И содержит папку site-packages, в которую устанавливаются библиотеки.

Активация виртуальной среды

Виртуальное окружение создано. Для начала работы с окружением нужно его активировать.

Чтобы начать использовать эту виртуальную среду, вам необходимо активировать ее, запустив скрипт под названием activate:

После активации строка консоли будет иметь префикс с именем среды.

Можно проверить версию python.

А также посмотреть список установленных в окружении библиотек.

Установим библиотеку внутри виртуальной среды

Попробую установить библиотеку в окружение.

После активации все библиотеки будут устанавливаться в данное виртуальное окружение.

Чтобы проверить как установилась библиотека, можно попробовать импортировать её.

Если при импорте ошибок не было, значит установка библиотеки прошла успешно.

Совместное использование

Если вы хотите, чтобы другие могли на своих компьютерах запустить код вашего проекта, то помимо кода им необходимо иметь те же версии библиотек, что и у вас.

Для этого создадам файл, в котором будут прописаны все необходимые библиотеки и их версии.

Выполню следующую команду:

Файл requirements.txt содержит все библиотеки (с указанием их версий), которые установлены в данном окружении.

Установить все эти библиотеки можно выполнив одну команду в терминале: pip install -r requirements.txt.

После успешной установки библиотек другой человек сможет запустить ваш проект на своем компьютере.

Деактивация

Чтобы выйти из виртуального окружения, необходимо ввести команду deactivate.

Заключение

В публикации я рассмотрел тему виртуальных окружений в Linux. Материал позволит вам более осознанно подходить к процессу разработки и облегчит поддержку ваших проектов. Остались вопросы, буду рад ответить на них в комментариях.

Комментарии (14)


  1. igorzakhar
    18.11.2022 10:35
    +4

    venv не нужно устанавливать если python версии 3.3 и выше, т.к. в этих версиях модуль venv входит в стандартную библиотеку.


    1. NewTechAudit Автор
      18.11.2022 16:31

      Согласен, но в статье это позволило установить/обновить ещё ряд необходимых пакетов. Посмотрите на скрин в статье.


  1. cry_san
    18.11.2022 10:41
    -5

    Не проще будет 1 раз поднять докер с питоном?


    1. iig
      18.11.2022 11:04
      +8

      Когда в руках молоток - всё вокруг похоже на гвозди ;) Можно и целую виртуальную машину развернуть. Но иногда venv достаточно.


      1. NewTechAudit Автор
        18.11.2022 16:50

        В точку!


      1. grSereger
        19.11.2022 11:11

        А в проде будет кубер с образом на базе arch linux


  1. select26
    18.11.2022 11:03
    +4

    Вначале рассмотрим работу с python библиотеками в Linux.

    То что вы описываете имеет весьма опосредованное отношение к Linux - вы пишете про Debian-based дистрибутивы. Важно понимать разницу. В Arch или CentOS packet manager отличается. Но это тоже Linux.
    Ну и про venv lib вам уже написали выше.
    Поправьте пожалуйста.


    1. NewTechAudit Автор
      18.11.2022 16:48
      -3

      Спасибо за комментарий! В статье ориентировался на самые распространённые дистрибутивы. Если описывать работу с python во всех дистрибутивах, то получится целая техническая документация 


  1. select26
    18.11.2022 11:36
    +1

    И еще стоит описать pyenv - когда вам нужно иметь несколько версий Python для разных проектов можно установить разные версии в разных venv.

    Я обычно использую такую последовательность в CI/CD:

                #  pyenv setup
                export PYENV_ROOT="$HOME/.pyenv"
                command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
                eval "$(pyenv init -)"
                #  Python 3.8.0 virtual environment setup 
                pyenv local 3.8.0
                python3 -m venv ./venv
                source venv/bin/activate
                pip install --upgrade pip
                #  Ansible install            
                pip install ansible
                ansible-galaxy collection install f5networks.f5_modules
                E.T.C.
    

    Вне CI/CD пропускаю секцию pyenv setup - обычно все уже настроено в ~/.bashrc

    Ну и модули, соответственно, устанавливаю не в систему, а в venv при помощи pip install. Это позволяет даже при одинаковой версии Python иметь разные версии библиотек в разных проектах.


    1. NewTechAudit Автор
      18.11.2022 16:49

      Спасибо, важное дополнение!

       


  1. DistortNeo
    18.11.2022 21:40

    Виртуальное окружение со всеми необходимыми настройками можно «передавать» вместе с вашим приложением. Так другому разработчику будет проще работать с вашим проектом.

    Нифига не проще, если у другого разработчика стоит задача не просто запустить проект, но и интегрировать его в большую систему.


    1. FireHawk
      20.11.2022 14:13

      А в чём проблема? Стандартный способ - передавать все зависимости в requirements.txt.


      1. DistortNeo
        20.11.2022 15:56

        Проблема в том, что зачастую там зафиксированы конкретные версии пакетов. И у каждого из подцепляемых проектов версии будут свои.


  1. Ryav
    20.11.2022 17:46
    +1

    Советую познакомиться с pyenv и poetry.