Возьми Python с собой

в 13:29, , рубрики: django, python, Песочница, метки: ,

Думали ли вы (в очередной раз подготавливая среду для Python) о том, как было бы здорово, если бы не приходилось настраивать с нуля рабочее окружение (да ещё и под разными операционными системами), а можно было бы сесть и просто начать писать? Я случайно открыл для себя pythonanywhere.com — сервис, позволяющий вести разработку на Python онлайн, прямо в браузере. Под катом — описание сервиса с картинками и видео.

У меня сейчас настроены несколько Windows и Linux компьютеров, синхронизирован исходный код через Dropbox и заведён microinstance на Amazon EC2. Всё это заняло уйму времени и не очень удобно — бывает идею хочется проверить «в поле», и рядом нет настроенной с любовью среды. Что же предлагает PythonAnywhere?

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

Также можно ознакомиться с выступлением разработчика Harry Percival на PyCon UK 2011 (хорошее знание английского приветствуется, но и без него можно многое понять из презентации):
В конце выступления Гарри не хватило времени и он вынужден был бегать по залу, чтобы у него не отобрали микрофон.

Программируем на Python в интернет

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

Владельцы айпадов торжествуют!

Теперь питоноводы могут писать приложения на iPad, с телефона или даже на «умном» телевизоре (smart TV) так же легко, как раньше делали это на своих компьютерах. PythonAnywhere работает на iPad и скоро будет готова версия для Android. Вы можете писать свои программы в веб-редакторе или запустить консольную сессию из-под любого современного браузера, поддерживающего HTML5. Уже не надо настраивать свой собственный сервер или платить за его настройку.

А что за кадром?

PythonAnywhere использует сервера Amazon (EC2), а мы можем использовать все преимущества этого подхода. Для быстрой разработки несложных приложений не понадобится платить ни копейки. А в случае мощных и ресурсоёмких задач — оплатим только использованные ресурсы.
Помимо того, имеется интеграция с DropBox, можно синхронизировать свои данные и код. При помощи командной строки легко работать с git, mercurial или subversion проектами на GitHub, Bitbucket и любом другом публичном репозитории.
Предлагаются версии Python 2.6, 2.7 и 3.2. Установлено очень много библиотек — NumPy, SciPy, Mechanize, BeautifulSoup, pycrypto и другие. Если этого набора недостаточно — имеются easy_install и pip, только используйте флаг --user, установка будет произведена в директорию .local в вашей домашней папке. Также добавлены virtualenv и virtualenvwrapper.
Поддерживается не только Django: Flask, Bottle, web2py — любой WSGI веб-фреймворк будет работать и скорее всего уже установлен (см. батарейки). В качестве баз данных можно использовать MySQL и SQLite, рассматривается возможность добавления MongoDB и PostgreSQL.
На наиболее дорогом (10 $/месяц, 2ГБ под файлы, SSH) тарифном плане можно хостить свой собственный домен, а на бесплатном тарифе дается субдомен вида your-username.pythonanywhere.com. Бесплатный тариф с минимальными ограничениями — доступно 500МБ дискового пространства, нет SSH.
Имеется аналог cron — можно запланировать запуск скриптов (не только Python) по расписанию.
Можно посмотреть логи доступа и ошибок веб-сервера.

Приступаем к работе

Регистрация не занимает много времени и сразу после подтверждения email-адреса можно начинать пользоваться сервисом.

Пробуем Ipython:
консоль Ipython
Django версии 1.3.1. С помощью easy_install я без проблем смог проапгрейдить Django до текущего релиза 1.4:

easy_install --user --upgrade django

Создаём новый Django-проект — для этого идем на вкладку Web и нажимаем большую кнопку «New Django App»:
создаём новый Django-проект
Для обычного Python проекта без веб-фреймворков просто создаём файл на вкладке Files и сразу попадаем в веб-редактор; после окончания редактирования готовый файл можно сохранить и тут же запустить на выполнение — откроется всплывающее окно с консолью, в которой будет выполняться наш скрипт.

Продолжим с Django — нам предлагают ввести имя проекта и папку для его хранения:
вводим имя проекта
Мы можем использовать папку, предлагаемую по умолчанию или сохранить проект в DropBox.
Небольшие нюансы, связанные с DropBox:
1) Желательно, чтобы ваш email в PythonAnywhere совпадал с email-ом в DropBox — ведь мы расшарим папку с проектом для «dropbox@pythonanywhere.com» и он должен соотнести эту папку с вашим аккаунтом. Если email не совпадает — на вкладке Files справа вверху нажимаем ссылку «Connect to DropBox» и указываем наш email в DropBox. Нам покажут в картинках как в DropBox расшарить свою папку для этого сервиса.
2) Создать проект прямо в каталоге ~/Dropbox нельзя — придется пользоваться подкаталогом, примерно так: ~/Dropbox/PythonAnywhereProjects/myproject. Техподдержка намекает что это временное явление, мол сейчас идёт развитие сервиса и они пока ограничены в возможностях.
3) Нельзя просто удалить расшаренную папку из Dropbox — в таком случае она навсегда останется в PythonAnywhere и её не удастся удалить даже из консоли, т.к. на это у нас нет прав доступа. Поэтому предварительно на сайте DropBox-а уберите доступ к расшаренной папке для пользователя «dropbox@pythonanywhere.com». После этого папка исчезнет из PythonAnywhere и её можно будет спокойно удалить в DropBox.

Итак, я использовал синхронизацию с DropBox:
проект создан

Проверяем:
Django работает

Дальше — создаём нужные файлы и редактируем их в веб-редакторе (или запускаем в bash-консоли vim/emacs). Если надо создать приложение в Django-проекте — используем bash-консоль:

./manage.py startapp myapp

Базу данных создаём на вкладке «MySQL», там же задаём пароль пользователя.

После того, как создали файлы — нужно перезагрузить веб-сервер. Для этого служит кнопка «Reload web app» на вкладке «Web».

Если хотите запускать несколько веб-приложений одновременно — техподдержка предлагает создать несколько аккаунтов с тем же email, в дальнейшем появится такая возможность на одном аккаунте.

Другие применения

Возможно вам нужно будет посоветоваться с коллегой — очень легко расшарить любую сессию. Для подключения вашему коллеге не нужно будет даже регистрироваться на сервисе — достаточно указать его email и он получит ссылку на текущую консольную сессию.

Быть может у вас есть блог о программировании с пошаговыми примерами — можно дать возможность читателям прямо на страницах блога тренироваться в программировании. Достаточно добавить этот код:

<iframe
  style="width: 640px; height: 480px; border: none;"
  name="embedded_python_anywhere"
  src="https://www.pythonanywhere.com/embedded/">
</iframe>

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

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

Не стоит зацикливаться на Python, ведь тут имеется и bash-консоль. Например, мы можем поддерживать постоянное SSH-соединение со сторонним хостом (обслуживаемый вами сервер и т.п.). Тогда если нам вдруг понадобится срочно подключиться, а мы будем например в гостях — достаточно будет браузера, консоль ждет нас в том состоянии, в каком мы её оставили.

Ещё это хорошая альтернатива Google App Engine (а может даже и некоторым платным Python хостингам). Уверен, вы сможете придумать и другие варианты.

Автор: brunen9


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js