В процессе работы над проектом мне потребовалось проверить, работает ли пакет Flask с установленным у меня Python. При запуске команды для установки Flask я получил предупреждение, что пакет уже установлен, поскольку у меня установлен Anaconda.

Однако при попытке запустить Hello World в приложении Flask на Sublime Text 3, консоль выдала ошибку модуля Flask. Я решил почитать об этом в интернете. Выяснилось, что в Anaconda установлен модуль Flask, а в Python, который использовался в Sublime Text, этот модуль отсутствует. Я решил разобраться в том, как правильно настроить Python, установить необходимые пакеты и настроить Sublime Text build system. В результате поисков я обнаружил Virtual Environments, с которыми не сталкивался ранее.

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

Python

На данный момент в сообществе поддерживаются две версии: 2.x и 3.x. Некоторые пакеты работают с Python 3.x, однако у других нет поддержки 3.x и они работают только с 2.x. Таким образом, в некоторых случаях используется Python 2.x, а в других — Python 3.x. Начнем с установки обеих версий Python. Для этого можно использовать установщик пакетов, например Homebrew.

Python 3.X

brew install python@3

Python 2.X

brew install python@2

Здесь также устанавливается pip, с помощью которого можно установить пакеты Python.

Virtual Environment

В начале работы над проектом выберите версию Python и укажите необходимое количество библиотек/пакетов. Имеет смысл установить эти пакеты вне рамок всей системы. Если вы работаете с несколькими версиями Python на одном компьютере или несколькими пакетами, которые работают только с определенными версиями Python, то можно установить несколько виртуальных окружений (Virtual Environments).

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

Определение место установки Python

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

Установка Python с официального сайта

/Library/Frameworks/Python.framework/Versions/

Здесь находится установленная версия. У меня версия 3.6, поэтому путь для Python выглядит следующим образом:

/Library/Frameworks/Python.framework/Versions/3.6/bin

Установка Python с помощью Homebrew

/usr/local/Cellar/

Затем нужно выбрать версию в каталоге python или python@2. Для python и версии 3.7.2_1 место расположения будет:

/usr/local/Cellar/python/3.7.2_1/bin

Установка virtualenv

Работаем с Python 3, установленным с помощью Homebrew. Устанавливаем virtualenvс использованием pip3.

pip3 install virtualenv

Создание Виртуального Окружения

Установка пакетов завершена, теперь можно перейти к Виртуальному Окружению. Для начала определим место расположения и название окружения. Я разместил его в домашнем каталоге под названием virtEnv1.

virtualenv -p python3 ~/virtEnv1

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

Активация окружения

Чтобы начать работу внутри окружения, его нужно активировать. После установки окружения внутри папки bin создается файл activate. Устанавливаем этот файл в качестве источника. Теперь мы находимся внутри виртуального окружения.

cd ~/virtEnv1
source bin/activate

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

Inside ‘virtEnv1’ environemnt

Установка пакетов и создание файла

Устанавливаем Flask.

pip install flask

Также создаем файл app.py в домашнем каталоге, который обладает самым базовым кодом Hello World в Flask.

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"


if __name__ == '__main__':
app.run(debug=True)

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

python ~/app.py

Со стороны клиента

Hello World в Flask

Со стороны сервера

* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 146-590-411
127.0.0.1 - - [26/Jan/2019 11:55:45] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [26/Jan/2019 11:55:46] "GET /favicon.ico HTTP/1.1" 404 -

Деактивация окружения

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

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

No flask error outside environment

Аналогичным образом, можно создать окружения и повторить те же действия в Python 2.

Использование Python в Sublime Text 3

Я предпочитаю работать с Sublime Text, когда не использую Jupyter notebooks. Чтобы установить Sublime Text для Python, нужно создать новую систему сборки (build system). Перейдите к:

Tools > Build System > New Build System...

И введите следующий код:

{
"cmd": ["/Users/<username>/virtEnv1/bin/python", "$file"],
"file_regex": "^[ ]File \"(...?)\", line ([0-9]*)",
"selector": "source.activate"
}

Замените <username> своим именем пользователя.

Сохраним все в качестве virtEnv1Python. Откройте файл app.py в Sublime Text. Установите систему сборки как virtEnv1Python. Для проверки работы приложения нажмите Command + B. Приложение начнет работу, в чем можно убедиться, перейдя по ссылке http://127.0.0.1:5000/.

Заключение

Мы рассмотрели использование virtualenv для создания Виртуальных Окружений в Python и установки пакетов внутри этих окружений.


Перевод статьи Karan Bhanot: Python Virtual Environments made easy

Предыдущая статьяКак отладка поможет вам стать лучшим разработчиком
Следующая статьяКак перевести iPhone в черно-белый режим и почему вам следует это сделать