Автор оригинала: 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 Отказ