24 мая 2012 в 17:29

Возьми 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 хостингам). Уверен, вы сможете придумать и другие варианты.
+65
3227
251
brunen9 11,0 G+

Комментарии (22)

0
Volshebnyi, #
Спасибо огромное!
Ресурс просто супер, уже в качестве теста написал мелко-приложение на Flask.
Интересно так же то, что можно в одной консоли работать нескольким пользователям.

Не сразу нашел, как перезапустить приложение из графического интерфейса.
В консоли работать не очень удобно из-за ощутимого лага (впрочем, может это только у меня).

В общем, в ближайшие дни собираюсь сделать на этом хостинге что-то простое и интересное.
+9
brunen9, #
Перед публикацией, памятуя о хабраэффекте, предупредил разработчиков. Только что получил ответ:
Thanks! We're getting a signup every 15 seconds or so :-)
0
faustoFF, #
Это что получается, предупредили, но ответа не дождались и получили его уже после публикации? Ай-я-яй, как нехорошо :)
0
brunen9, #
Нет, это я неточно выразился. Еще перед публикацией разработчики подтвердили что будут следить за нагрузкой на серверы, а сразу после публикации я дополнительно сообщил что мол готовьтесь, сейчас начнётся. Приведённый выше ответ разработчиков относился уже к этому моменту конечно же.
+5
Volshebnyi, #
Итак. Редактор довольно удобный, кое-чего не хватает. Однажды то ли я затупил, то ли accesslog и errorlog не обновлялись. Вообще, после sublime text 2 очень привык ко всяким быстрым клавишам, вроде комментирования строк, но тут такого пока нет. С отступами редактор работает хорошо.

Веб-приложение откликается медленно, но я не очень представляю, как они там оптимизируют работу приложения. volshebnyi.pythonanywhere.com/
+1
brunen9, #
Угадыватель желаний понравился.

По поводу быстрых клавиш:
1) попробуйте написать разработчикам — ссылка Forums справа вверху
2) сам я не любитель vim (но в нём ведь есть шорткаты) — запускается из консоли
0
magic4x, #
Хорошая площадка для всякого рода «примеров» типа jsfiddle, кажется аналогов еще не было.
Как pythonanywhere пока слабо себе представляю, в сегодняшние дни виртуальное окружение не самое страшное: обычно устанавливается до кучи другого софта. Надо подумать.
А по поводу «идей», они высылают на почту письмо с просьбой ответить на несколько простых вопросов. Ребята очень стараются, это заметно, я радуюсь как дитя когда такое вижу, хочется врубить acdc и делать хорошие штуки, плюс им в карму.
0
Volshebnyi, #
Вообще, аналог есть: pythonfiddle.com/
Правда, у них почему-то сейчас не работает Share, упорно выдает линк на главную.
+6
kutu, #
недавно для этого сервиса написал плагин к Sublime Text 2, можно создать/открыть/отредактировать/сохранить файл, перезагрузить webapps (прикручивается шорткат)
ссылка на форум на pythonanywhere
плагин на гитхабе
+1
f0b0s, #
Если более строго отнестись к заголовку «возьми Python с собой», то я могу еще порекоментова portablepython.com. Он не раз выручал меня на лабараторках по вычислительной математике, когда разрешено было использование любого языка, но установлен был только паскаль :-) Кстати, в комплекте идет масса полезных библиотек, например, scipy (numpy), который иногда незаменим для быстрых вычислений каких-нибудь матриц.
0
Mayflower, #
Спасибо за пост, очень понравилось, особенно развертывание веб-приложения из коробки.
Сейчас проверила на django-проекте. Синхронизация с Dropbox работает, хорошо что указали на особенности работы с ним. В первый раз как раз залила django-app в корень и удивлялась, что не так.
Работающий easy_install тоже очень здорово. Быстро догрузила недостающие библиотеки для пагинации и капчи. Небольшой недостаток с базой данных — пришлось лезть и менять кодировку базы на utf8 в консоль, так как по дефолту latin1. Но все равно шикарно.
0
Tuxman, #
Хотелось бы сравнить лимиты бесплатного аккаунта от pythonanywhere, с бесплатным аккаунтом от Амазона, ведь в виртуальной машине тоже можно крутить вебсервер и питон, да еще и ssh будет в бесплатном аккаунте, так?
0
brunen9, #
К сожалению, полноценного сравнения не получится. Если посмотреть на тарифы — никаких точных характеристик, кроме места на диске, не указано. Это связано с тем, что сервис ещё только развивается, и на данный момент не ясно, насколько он будет востребован, какая нагрузка будет на серверы и т.д. Вобщем, никто ничего пока не знает, вот и обходятся характеристиками «быстро/медленно».
И всё же приведу свой пример: microinstance, бесплатная годовая подписка для новых пользователей, установлен Ubuntu Server, свободного места на диске осталось 6ГБ, имеется SSH и настроен FTP. Но это на первый год, а потом придётся раскошелиться.
0
gorenski, #
Можно один раз настроить окружение в виртуальной машине.
0
Gular, #
Это хорошо. Но ведь сейчас появляются так называемые «cloud IDE». Например, cloud ide. Там есть поддержка разных ЯП.
+1
aNDREIQA, #
Попробовал написать что-то с IPad, очень неудобно.
Время ввода символа и его появления в консоли очень ощутимо. лучше бы разработчики сделали нативное приложение для IPad.
Во общем идея классная. Спасибо!
0
brunen9, #
Спасибо за отзыв. У меня айпада нет, проверить не мог, поверил на слово описанию сервиса. Буду проверять уже на андроиде, когда придёт по почте планшет.
Если Вы всё же не оставили эту дикую (для меня) идею программировать на айпаде — свяжитесь с техподдержкой сервиса.
Вообще техподдержка очень дружелюбная и явно старается помочь пользователю.
0
aNDREIQA, #
Нашел баг, после редактирования сорца в vim не возможно переключиться с заглавных букв на строчные используя средства iPad. Написал разработчики. Ответ пришел через 20минут.
Hi ****** — thanks for signing up!

We crave feedback like prehistoric mammals crave an asteroid, so please please please tell us:

   1) What nifty stuff do you want to use PythonAnywhere for?

   2) What are the most important features for you?  Are we missing anything?

   3) Finally, the most important question ;-)  You've signed up for the free plan, but what would it take to make PythonAnywhere so earth-shatteringly useful, that you would actually pay for it?

Thanks in advance for your thoughts!  And don't worry, if you don't have time to reply to these questions, we won't hold it against you.

Happy Pythoning!

Giles
— PythonAnywhere: Develop Python in your browser
0
brunen9, #
Это стандартное письмо в ответ на регистрацию. Думаю настоящий ответ придёт тоже скоро, если они не спят сейчас — там ведь ночь?
0
ha2bj, #
А в дропбоксе есть что-то типа .dropboxignore? а то при редактировании через vim *swp файл колбасится.
0
ha2bj, #
0
Tuxman, #
Почему то сразу хочется начать использовать сервис не по инструкции.
Кстати там много всего ещё есть, например perl v5.10.1, так что я бы не стал зацикливаться на Python ;-)
Если посмотреть на имеющиеся бинари то они собраны под x86-64.
Кто-нибудь пробовал принести туда что-то ещё прямо в бинарях?

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