Разработка сайтов в Лисичанске, ЛНР. Виртуальные среды в Python — это просто

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

Виртуальные среды

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

Виртуальные среды включают новую копию двоичных файлов Python и автономную копию всей стандартной библиотеки Python. Вот почему он может работать сам по себе.

Использование виртуальных сред дает нам следующие преимущества:

мы можем сохранить наши локальные машинные пакеты нетронутыми

мы можем поделиться зависимостями с другими с помощью requirements.txtфайла

мы можем развернуть приложение Python на выделенном сервере (PythonAnyWhere, Heroku и т. д.)

Потребность в виртуальных средах

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

Если вы разработчик Django, я уверен, что вы используете платформу Django rest для создания мощных API-интерфейсов для отдыха, панель инструментов Django Debug для сбора различной отладочной информации о текущем запросе/ответе, Celery для заботы об операциях в реальном времени и планирования. также и так далее.

Например, я сильно полагаюсь на requestsпакет для некоторых своих проектов, а веб-приложение Django, над которым я сейчас работаю, зависит от версии 2.3.0. Согласно официальной документации, на момент написания последней версией этого пакета является версия 3.2.

Предположим, я установил последнюю версию библиотеки на свой компьютер с Ubuntu, потому что она нужна мне для другого проекта. Кажется, все работает нормально, пока я не попытаюсь использовать свой старый проект, который отлично работал с 2.3.0. Внезапно все ломается.

Что случилось? Может быть API последней версии Django изменился с версии 2.3.0? Причина на данный момент не имеет значения, так как мой старый проект сломан и больше не работает.

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

Различные пакеты решают эту проблему. Давайте посмотрим на некоторые, которые выделяются.

До начала

В этом руководстве мы будем использовать Python 3, поэтому давайте начнем с проверки вашей установки Python.

Для этого откройте терминал — cmd/PowerShell в Windows — и введите следующую команду:

python —version

Python 3.9.5 # My result

Примечание. В большинстве систем macOS и Linux установлен Python. Вы можете проверить руководство по установке Python, если вы используете Windows.

Если вы не получили результат формы Python 3.x, есть два варианта:

если эта команда вернула Python 2.xверсию, вам нужно будет использовать python3вместе с этим руководством

если вы получили Unknown commandошибку, попробуйте запустить python3, и если вы получите другую ошибку, следуйте инструкциям по установке Python

Вы можете доказать существование python3бинарника, проверив его версию:

python3 —version

Python 3.9.5

Примечание: если приведенная выше команда сработала, вам нужно будет запустить python3вместо python.

Теперь, когда вы знаете, какая команда Python выполняется на вашем компьютере, давайте перейдем к виртуальным средам.

Встроенный venvмодуль

Давайте воспользуемся встроенным модулем Python venv для создания вашей первой виртуальной среды.

Примечание: для использования этого модуля в вашей системе должен быть установлен Python 3.3 или выше.

Чтобы создать виртуальную среду Python с помощью venv, введите следующую команду:

python -m venv virt1

Примечание: этот -mфлаг означает, что Python запускает встроенный venvмодуль как скрипт.

Это создаст виртуальную среду с именем virt1, но это всего лишь аргумент. Вы можете создать виртуальную среду с любым именем.

Все, что установлено в virt1каталоге, не повлияет на глобальные пакеты или общесистемные установки, что позволяет избежать конфликтов зависимостей.

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

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

source virt1/bin/activate

Это не будет работать в каждой системе, поэтому вы можете проверить таблицу ниже, чтобы иметь четкое представление о том, какую команду использовать:

Платформа Оболочка Команда для активации виртуальной среды

POSIX баш/зш $ источник (venv-имя) /bin/активировать

рыба $ источник (venv-имя) /bin/activate.fish

csh/tcsh $ источник (venv-имя) /bin/activate.csh

Ядро PowerShell $ (venv-имя) /bin/Activate.ps1

Окна cmd.exe C: > (venv-имя) \Scripts\activate.bat

PowerShell PS C: > (venv-имя) \Scripts\Activate.ps1

Примечание: $знак POSIX и знак C: >, PS C: >в Windows не являются частью команды.

Как вы могли заметить, я использую оболочку bash в POSIX (macOS и Linux), поэтому я запускаю приведенную выше команду.

После создания среды

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

Активированная среда

Следующая команда позволяет деактивировать виртуальную среду:

deactivate

Обратите внимание, как ваше приглашение терминала снова изменилось.

Деактивированная среда

Теперь снова активируйте виртуальную среду и используйте whichкоманду для проверки используемого двоичного файла Python:

source virt1/bin/activate

which python

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

/home/daniel/tests/python-tests/venvs/virt1/bin/python

Если вы deactivateи whichснова, вы должны получить другой результат:

deactivate

/usr/bin/python

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

Пип с виртуальными средами

Хотя это не руководство по pip, важно продемонстрировать рабочий процесс между pip и виртуальными средами.

pip — название которого расшифровывается как «Pip Installs Packages» — это менеджер пакетов, используемый для установки и управления пакетами Python.

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

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

pip install -r requirements.txt

Вот requirements.txtфайл, который содержит все зависимости проекта — конкретные версии пакетов.

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

pip freeze > requirements.txt

Если вы хотите установить конкретную версию пакета, вы можете выполнить pip installкоманду, указав имя пакета, знак двойного равенства (==) и его версию:

pip install package==version

В других ситуациях мы также можем удалить пакет с нашей машины (или виртуальной среды):

pip uninstall some-package-name

Виртуалэнв

Virtualenv — это внешний пакет, используемый для создания виртуальных сред. На самом деле встроенный Python venvявляется его подмножеством, поэтому virtualenvимеет больше возможностей, чем первый вариант, который мы видели. virtualenvБолее подробно о преимуществах можно узнать venvв официальной документации.

А пока давайте установим virtualenvс помощью pip (убедитесь, что вы деактивировали предыдущий venv), используя команду ниже:

pip install virtualenv

Этот инструмент работает аналогично venv, поэтому давайте проверим его, создав другую виртуальную среду:

virtualenv virt2

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

Как и в случае с venv, мы должны активировать виртуальную среду перед ее использованием:

source virt2/bin/activate

Если я сейчас установлю новейшую версию запросов, она будет установлена ​​только в виртуальной среде venv2:

pip install requests

Приведенная выше команда выдает следующий вывод:

Collecting requests

...

Installing collected packages: urllib3, idna, chardet, certifi, requests

Successfully installed certifi-2021.5.30 chardet-4.0.0 idna-2.10 requests-2.25.1 urllib3−1.26.5

Если я запущу pip freezeкоманду, которая распечатает список всех моих установленных пакетов, я получу это:

certifi==2021.5.30

chardet==4.0.0

idna==2.10

requests==2.25.1

urllib3==1.26.5

Как видите, единственные пакеты, которые я получаю, — это последняя версия requests — на момент написания — и ее зависимости.

Другие функции Virtualenv

Мы можем использовать -pфлаг во время работы virtualenv, чтобы использовать определенную версию Python, глобально установленную на машине.

Например, следующую команду можно использовать для создания виртуальной среды virt2с Python3, если на вашем компьютере установлен Python3:

virtualenv -p /usr/bin/python3 virt2

И чтобы удалить виртуальную среду, вы используете rm -rкоманду, как и для любого другого каталога, который хотите удалить:

rm -r virt2

Вы можете узнать больше о расширенном использовании CLI-интерфейса virtualenv в официальной документации.

Виртуальная обертка

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

Как и в случае с virtualenv, его можно легко установить с помощью pip.

pip install virtualenvwrapper

Это создаст файл оболочки, virtualenvwrapper.shрасположенный в вашем ~/.local/bin/каталоге. Эта папка используется для хранения двоичных файлов пакетов, которые позволяют вам использовать пакеты Python непосредственно из вашего терминала.

Перед использованием virtualenvwrapper вам необходимо отредактировать файл конфигурации оболочки. Поскольку я использую оболочку bash, я добавлю следующее содержимое в.bashrcфайл, расположенный в моем домашнем каталоге:

cat <> ~/.bashrc

# Virtualenwrapper settings

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python

export VIRTUALENVWRAPPER_VIRTUALENV=~/.local/bin/virtualenv

export WORKON_HOME=$HOME/.virtualenvs

export PROJECT_HOME=$HOME/Documents

source ~/.local/bin/virtualenvwrapper.sh

EOT

Это добавит — запишите в конец файла — указанное выше содержимое в.bashrcфайл. Если приведенная выше команда не сработала, откройте файл и измените его вручную.

VIRTUALENVWRAPPER_PYTHONуказывает на двоичный файл Python вашей машины. Вы можете проверить это с помощью следующей команды (без активации какой-либо виртуальной среды):

which python

/usr/bin/python # My result

Обязательно измените.bashrcфайл в соответствии с вашим двоичным путем Python.

Примечание: если вы используете Windows, вы можете использовать virtualenvwrapper-win.

Затем мы перезагружаем оболочку bash с внесенными в.bashrcфайл изменениями, выполнив следующую команду:

source ~/.bashrc

Теперь эту mkvirtualenvкоманду можно использовать для простого создания новых сред, помещенных по умолчанию в эту папку:

mkvirtualenv sitepoint

Вы можете увидеть sitepointпапку виртуальной среды, введя WORKON_HOMEпуть, который мы определили выше как $HOME/.virtualenvs:

ls ~/.virtualenvs

sitepoint # Virtual env folder

Чтобы получить список всех виртуальных сред, созданных virtualenvwrapper, вы можете запустить workonкоманду без аргументов:

workon

sitepoint # My result

Мы можем легко активировать виртуальную среду с помощью workonкоманды:

workon sitepoint

Команда для деактивации виртуальной среды такая же, как и та, которую мы использовали ранее:

deactivate

Очень легко переключаться между различными виртуальными средами. Например, в workonдругую виртуальную среду:

workon another_virtualenv

rmvirtualenvДля удаления виртуальной среды следует использовать команду:

rmvirtualenv sitepoint

Заключение

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

Инструменты там. Теперь пришло время включить их в сложные личные проекты. Используете ли вы какие-либо другие интересные подходы в процессе разработки Python?

Делитесь нашими материалами с друзьями!

 

 

Заказать разработку сайта