В процессе работы над проектом мне потребовалось проверить, работает ли пакет 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
Название виртуального окружения отображается в скобках, указывая на то, что мы работаем внутри окружения.
Установка пакетов и создание файла
Устанавливаем 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
Со стороны клиента
Со стороны сервера
* 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, то при попытке запуска того же кода, произойдет ошибка.
Аналогичным образом, можно создать окружения и повторить те же действия в 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