Рубрики
Без рубрики

Как управлять зависимостями Python с использованием виртуальных сред

Автор оригинала: Saransh Kataria.

Когда мы начнем строить проект Python, который выходит за рамки простых сценариев, мы склонны начинать использовать сторонние зависимости.

При работе над более крупным проектом нам нужно подумать о том, чтобы управлять этими зависимостями эффективными способом. И при установке зависимостей мы всегда хотим быть внутри виртуальных сред. Это помогает держать вещи приятно и чистыми. Это также помогает избежать испортить нашу среду Python.

Мы можем использовать PIP для установки пакетов в наш проект Python. И общее количество упаковки, установленные в одном проекте Python. Это может привести к некоторым вопросам, касающимся версий установленных пакетов и их зависимостей.

Когда мы используем PIP Установите <имя пакета> В проекте мы устанавливаем пакет и его зависимости в глобальном пространстве имен Python. И это установит пакет для конкретной версии Python, которую мы настроили Python для.

Мы можем узнать, где этот каталог использует

python3.7 -c "import sys; print('\n'.join(sys.path))"

/usr/lib/python27.zip
/usr/lib/python2.7
/usr/lib/python2.7/lib-dynload
/usr/lib/python2.7/site-packages

И если мы устанавливаем тот же пакет, используя PIP3 Установите <имя пакета> , он будет установлен в отдельном каталоге с версией Python 3. Мы можем преодолеть это, используя следующую команду:

 python2.7 -m pip install 

Это до сих пор не решает нашу проблему пакетов, устанавливаемых системой, что может привести к следующим проблемам:

  • Различные проекты, имеющие разные версии одного такого же пакета, будут конфликтовать друг с другом
  • Зависимости проекта могут противоречить зависимостям уровня системы, которые могут вообще сломать систему
  • Многопользовательские проекты не являются возможностью
  • Тестовый код против разных версий Python и библиотеки является сложной задачей

Чтобы избежать этих проблем, разработчики Python используют виртуальные среды. Эти виртуальные среды используют изолированные контексты (каталоги) для установки пакетов и зависимостей.

Нам нужен инструмент для использования виртуальной среды Python. Инструмент, который мы используем, чтобы сделать их, известен как Венв Отказ Он встроен в стандартную библиотеку Python для Python 3.3+.

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

python2 -m pip install virtualenv

ПРИМЕЧАНИЕ. Мы будем больше поговорим о Venv в этом посте и Python 3, поскольку существует несколько различий между ним и виртуальностью. Команды немного отличаются, и инструменты работают по-разному под капотом.

Мы начнем, сделав новый каталог, в котором мы хотим работать с нашим проектом.

mkdir my-python-project && cd my-python-project

Тогда мы создадим новую виртуальную среду:

python3 -m venv virtualenv

# creates a virtual environment called virtualenv, the name can be anything we want

Это создаст каталог под названием VirtualenV в каталоге, который мы только что создали. Каталог будет содержать папку BIN, папку Lib, An include папку и файл конфигурации среды.

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

Чтобы начать использовать эту среду, нам нужно активировать его. Это также изменит нашу командную строку в текущий контекст.

$ source env/bin/activate
(virtualenv) $

Подсказка также является индикатором, который виртуальная среда активна, и код Python выполняется в этой среде.

Внутри нашей среды пакеты для широких системных систем недоступны, и любые пакеты, установленные внутри окружающей среды, не доступны снаружи.

Только Пип и SetUpeWools установлены по умолчанию в виртуальной среде.

После активации среды переменная пути изменена для достижения концепции виртуальной среды.

Когда мы закончим и хотите перейти на глобальную среду, мы можем выйти с помощью команды deactivate:

(virtualenv) $ deactivate 
$

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

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

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

(virtualenv) $ pip freeze
Flask==1.1.2

Мы можем написать это в файл требований .txt, чтобы загрузить в Git или поделиться с другими людьми в любой другой форме.

(virtualenv) $ pip freeze > requirements.txt

Эта команда может быть использована для обновления файла тоже.

А потом, когда кто-то хочет запустить наш проект на своем компьютере, все, что им нужно сделать, это сделать:

$ cd copied-project/
$ python3 -m venv virtualenv/
$ python3 -m pip install -r requirements.txt

И все будет работать, как это было в нашей системе.

Обертывание

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

Вы можете найти другие статьи на https://www.wisdomgeek.com Отказ