Мне повезло иметь полный контроль над архитектурой приложения моей компании, и я решил фрагментировать наш прототип, записанный в Ruby/направляющих и начать заново в Python. Это по нескольким причинам: Я хочу изучить Python, я предпочитаю синтаксис, и я в основном сказал "F ** k он, давайте сделаем это".
Так, раскрытие в памяти, это будет довольно интенсивным приложением, я хотел бы услышать Ваши мнения о следующем:
API испытывает необходимость для взаимодействия через интерфейс с приложением Clojure для обработки некоторого внутреннего материала данных и интерфейса с очередью сообщений, поэтому если бы это не Python, было бы замечательно иметь некоторые библиотеки к нему.
TDD/BDD очень важен для меня, таким образом, чем более протестированный, тем лучше!
Будет действительно интересно считать Ваши мысли об этом. Очень ценивший.
Мое лучшее,
Jamie
Фреймворки
Хорошо, здесь я немного предвзят, поскольку в настоящее время я широко использую Django и организую Django User Group в Лондоне, так что имейте это в виду, когда будете читать следующее.
Начните с Django, потому что это отличный наркотик. Много документации и литературы, очень активное сообщество людей, с которыми можно пообщаться, и множество примеров кода в сети.
Это совершенно нетехническая причина. Pylons, вероятно, более чист с точки зрения философии Python (будучи в большей степени набором дискретных битов и кусочков), но многие технические вещи являются личным предпочтением, по крайней мере, пока вы не погрузитесь в Python больше. Сравните очень активный тэг Django на Stack Overflow с тэгом pylons или turbogears, и я бы сказал, что с Django просто легче начать, независимо от того, что связано с кодом.
Лично я по умолчанию использую Django, но обнаружил, что все больше времени предпочитаю писать на более простых микрофреймворках (подумайте о Sinatra, а не о Rails). Есть из чего выбрать (хороший список здесь, http://fewagainstmany.com/blog/python-micro-frameworks-are-all-the-rage). Я склоняюсь к использованию MNML (потому что я написал его часть и он крошечный), но другие активно разрабатываются. Я обычно делаю это для небольших, глупых веб-сервисов, которые затем нанизываются на проект Django в середине, обслуживая людей.
Здесь стоит отметить appengine. Вы должны работать в рамках его ограничений, и он не предназначен для всего, но это отличный способ просто поиграть с Python и быстро получить что-то работоспособное. Это отличный тестовый стенд для обучения и экспериментов.
Mongo/ORM
Что касается MongoDB, то вам, скорее всего, стоит посмотреть на базовую библиотеку python mongo ( http://api.mongodb.org/python/ ), чтобы понять, есть ли в ней все, что вам нужно. Если вам действительно нужно что-то более ORM, то mongoengine (http://hmarr.com/mongoengine/) может быть тем, что вы ищете. Многие люди также работают над тем, чтобы Django более легко интегрировался с бэкендами nosql. Некоторые из этих работ запланированы на будущие релизы Django, но код django-norel ( http://www.allbuttonspressed.com/projects/django-nonrel) есть уже сейчас.
Для реляционных данных SQLAlchemy ( http://www.sqlalchemy.org/) хорош, если вам нужно что-то отдельное. Django's ORM также отлично подходит, если вы используете Django.
API
Наиболее официальная библиотека Oauth - python-oauth2 ( http://github.com/simplegeo/python-oauth2), которая имеет пример Django в составе документации.
Piston ( http://bitbucket.org/jespern/django-piston/wiki/Home) - это приложение Django, которое предоставляет множество инструментов для создания API. Его преимущество в том, что он довольно активен, хорошо поддерживается и повсюду находится в производстве. Существуют и другие проекты, включая Dagny ( http://zacharyvoase.github.com/dagny/), который является ранней попыткой создать что-то похожее на RESTful ресурсы в Rails.
В действительности любой фреймворк Python (или даже просто сырой код WSGI) должен быть достаточно хорош для решения такого рода задач.
Тестирование
Python имеет unittest как часть стандартной библиотеки, а unittest2 есть в python 2.7 (но перенесен и в предыдущие версии http://pypi.python.org/pypi/unittest2/0.1.4). Некоторым также нравится Nose ( http://code.google.com/p/python-nose/), который является альтернативным бегунком для тестирования с некоторыми дополнительными возможностями. Twill ( http://twill.idyll.org/) также хорош, это "простой язык сценариев для веб-браузинга", удобный для функционального тестирования. Freshen ( http://github.com/rlisagor/freshen) - это порт cucumber на Python. Я еще не успел использовать его в гневе, но беглый взгляд сейчас показывает, что он стал намного лучше, чем когда я смотрел в последний раз.
Вообще-то я также использую Ruby для высокоуровневого тестирования приложений и apis на Python, потому что мне нравится сочетание celerity и cucumber. Но я странный и получаю смешные взгляды от других Python-людей за это.
Очереди сообщений
Для очереди сообщений, какой бы язык я ни использовал, я теперь всегда использую RabbitMQ. В прошлом у меня был некоторый успех с stompserver, но Rabbit - это потрясающе. Не беспокойтесь, что он сам не написан на Python, как и PostgresSQL, Nginx или MongoDB - все это не просто так. Все, что вас волнует, - это доступные библиотеки. Здесь вы ищете py-amqplib ( http://barryp.org/software/py-amqplib/), которая представляет собой библиотеку низкого уровня для работы с amqp (протокол для работы с rabbit, а также другими очередями сообщений). Я также использовал Carrot ( http://github.com/ask/carrot/), с которым проще начать работу и который предоставляет более приятный API. Вспомните bunny в Ruby, если вы с ним знакомы.
Окружение
Какие бы частички экосистемы Python вы ни решили использовать, я бы рекомендовал освоить pip и virtualenv (http://clemesha.org/blog/2009/jul/05/modern-python-hacker-tools-virtualenv-fabric-pip/ - обратите внимание, что fabric - это тоже круто, но не существенно, и эта документация по этому инструменту устарела). Подумайте об использовании Ruby без gem, bundler или rvm, и вы будете в правильном направлении.
Я сам новичок в python и планирую подробнее изучить его в этом году. У меня было несколько неудачных попыток, но профессиональные потребности всегда возвращают меня к PHP. Несколько раз я занимался разработкой, и у меня был действительно хороший опыт использования web2py в качестве среды Python. Это довольно хорошо сделано и полно функций, но при этом очень легкое. Уровень базы данных кажется очень гибким и зрелым.
Что касается TDD / BDD и остальных ваших вопросов, у меня нет опыта работы с параметрами Python, но мне было бы интересно услышать, что говорят другие.
Я использую Twisted Framework на основе библиотеки Nevow для веб-приложения на базе python.
Все ваши критерии укладываются в этот единый фреймворк.
Хорошо, возможно, вы делаете ошибку, ту же ошибку, которую сделал я, когда начал работать с python.
Прежде чем вы выберете такую вещь, как django, который является отличным, но нетипичным веб-фреймворком для Python, проведите ночь в обнимку с:
Этот - хорошее начало. Убедитесь, что вы немного посмотрите Werkzeug , затем проверьте какой-то классический WebOb . Может быть, если вы чувствуете огонь в крови, а возможно, wsgi немного ошибочен, но только для богов, посмотрите Flask
Я не говорю, используйте его, Django тоже прекрасен, но если вы не знаете Python и используете django, вы рискуете изучить фреймворк.
WSGI очень прост. Вы узнаете о Paste, Pastescript и Pylons.
Затем примите решение. Будет намного проще научиться делать голые кости wsgi или Flask, такие вещи, как присвоение переменных, использование интерпретатора, проблемы стиля, тестирование, на 3 файлах на пару ночей вместо django. Возьмите 2 ночи. Тогда вы увидите большое сходство между веб-фреймворками Python, а не различия. Черт, ты можешь даже бросить с Flask.
Просто небольшой совет, я сделал то же самое с Ruby, зайдя через Rails, и ... ну, были сказаны сильные слова.
Язык, затем базовый WSGI и тестирование, затем выберите свой фреймворк и бросьте