Подходит ли Python для крупных программных проектов (не в Интернете)?

Прямо сейчас я разрабатываю в основном на C / C ++, но я написал несколько небольших утилит на Python для автоматизации некоторых задач, и мне это очень нравится как язык (особенно продуктивность).

За исключением производительности (проблема, которую иногда можно решить благодаря простоте взаимодействия Python с модулями C), как вы думаете, подходит ли он для производственного использования при разработке автономных сложных приложений (подумайте, например, о текстовом редакторе или графический инструмент)?

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


person martjno    schedule 30.08.2008    source источник
comment
Этот вопрос слишком запутанный и неоднозначный. Казалось бы, вы хотите знать, в частности, об использовании CPython, а не IronPython и т. Д., Но это так и не было разъяснено. Вы спрашиваете только о языке или о выборе языка + переводчик? Вопрос об IDE - это совсем другая тема. Если бы я задавал вопрос, я бы сформулировал его так: насколько хорош выбор CPython для разработки сложных приложений?   -  person Acumenus    schedule 29.11.2013
comment
Просматривая материалы в 2014 году, я заметил этот вопрос и хотел отметить, что Resolver One, таблица, упомянутая в качестве примера в нескольких комментариях, больше не разрабатывается активно.   -  person asthasr    schedule 18.07.2014


Ответы (13)


Мы использовали IronPython для создания нашего флагманского приложения для работы с электронными таблицами (производственный код 40kloc - и это Python, что IMO означает, что loc per feature мало) по адресу Resolver Systems, поэтому я бы определенно сказал, что он готов для производственного использования сложных приложений.

Есть два способа, по которым это может оказаться для вас бесполезным :-)

  1. Мы используем IronPython, а не более обычный CPython. Это дает нам огромное преимущество, заключающееся в возможности использовать библиотеки классов .NET. Возможно, я настраиваю себя на флейм здесь, но я бы сказал, что никогда не видел приложения CPython, которое выглядело бы «профессионально», поэтому доступ к набору виджетов WinForms был для нас огромной победой. IronPython также дает нам возможность легко перейти на C #, если нам нужно повысить производительность. (Хотя, честно говоря, у нас никогда не было необходимости в этом. Все наши проблемы с производительностью на сегодняшний день связаны с тем, что мы выбрали глупые алгоритмы, а не потому, что язык был медленным.) Использовать C # по IP намного проще чем писать расширение C для CPython.
  2. Мы занимаемся экстремальным программированием, поэтому мы пишем тесты, прежде чем писать код. Я бы не стал писать производственный код на динамическом языке, не написав сначала тесты; отсутствие этапа компиляции должно быть чем-то покрыто, и, как отмечали другие люди, рефакторинг без этого может быть трудным. (Ответ Грега Хьюгилла предполагает, что у него была такая же проблема. С другой стороны, я не думаю, что в наши дни я бы написал - или особенно рефакторинг - производственный код на любом языке без предварительного написания тестов - но YMMV.)

Re: IDE - мы вполне довольны тем, что каждый человек пользуется своим любимым текстовым редактором; если вы предпочитаете что-то более тяжелое, то WingIDE пользуется большим успехом.

person Giles Thomas    schedule 03.11.2008
comment
Очевидная проблема с IronPython, конечно, заключается в том, что если вы не используете Windows, вы теряете .NET :) Но Resolver - это круто, и он действительно выглядит как настоящее приложение :) - person Gregg Lind; 03.03.2009
comment
Что касается CPython, выглядящего профессионально - я полагаю, вы имеете в виду native в этом контексте - вы можете попробовать wxPython. - person Kit; 10.08.2010
comment
Или PySide той же компании QT. - person Edwin Yip; 11.04.2011
comment
@GreggLind IronPython отлично работает под MONO ... не уверен, было ли это правдой в '09 ... Просто обновляю для потомков :) - person Woodrow Douglass; 13.12.2012
comment
Неплохо подмечено. Некоторые компоненты Windows .NET по-прежнему не работают, хотя на самом деле они не .NET, а представляют собой .NET-оболочки для собственного кода Windows. - person Giles Thomas; 14.12.2012
comment
Re: professional - думаю (и это было давно) я имел в виду некую комбинацию родного и эстетичного. На момент написания оригинального поста я не видел ни одного приложения с графическим интерфейсом пользователя Python, которое было бы и тем, и другим - на самом деле, большинство из них выглядело функционально, но грубо. Возможно, это изменилось, но последние пару лет я использую CPython на серверной части веб-приложений почти исключительно, поэтому не могу точно сказать. - person Giles Thomas; 14.12.2012

Вы найдете в основном два ответа на этот религиозный (да! Конечно! Это лучший язык на свете!) И другой религиозный (вы, должно быть, шутите! Python? Нет ... он недостаточно зрелый). Возможно, я пропущу последнюю религию (Python ?! Используйте Ruby!). Правда, как всегда, далеко не очевидна.

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

Минусы: как динамический язык имеет гораздо худшую поддержку IDE (правильное завершение синтаксиса требует статической типизации, явной в Java или предполагаемой в SML), его объектная система далека от идеально (интерфейсы, кто угодно?), и легко получить беспорядочный код, в котором есть методы, возвращающие либо int, либо логическое значение, либо объект или что-то еще при неизвестных обстоятельствах.

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

Скажем, было бы хорошо использовать его для Stack Overflow, у которого есть три разработчика, и я думаю, не более 30 тысяч строк кода. Для больших вещей сначала ваша разработка будет очень быстрой, а затем, когда команда и кодовая база будут расти, все замедлится больше, чем с Java или C #. Вам нужно компенсировать отсутствие проверок времени компиляции, написав больше модульных тестов, рефакторинг становится сложнее, потому что вы никогда не узнаете, что сломал ваш рефакторинг, пока не запустите все тесты или даже все большое приложение и т. Д.

Теперь решите, насколько большой будет ваша команда и насколько большим должно быть приложение, когда оно будет готово. Если у вас 5 или меньше человек и целевой размер примерно равен переполнению стека, продолжайте писать на Python. Вы закончите в кратчайшие сроки и будете довольны хорошей кодовой базой. Но если вы хотите написать второй Google или Yahoo, вам будет намного лучше с C # или Java.

Замечание по C / C ++, о котором вы упомянули: если вы не пишете критически важное для производительности программное обеспечение (скажем, массивный параллельный трассировщик лучей, который будет работать в течение трех месяцев при рендеринге фильма) или очень критически важную систему (скажем, посадочный модуль Марса, который будет летать три года подряд) и имеет только один шанс правильно приземлиться, иначе вы потеряете $ 400 млн) не используйте его. Для веб-приложений, большинства настольных приложений, большинства приложений в целом это не лучший выбор. Вы умрете отладочных указателей и выделения памяти в сложной бизнес-логике.

person Marcin    schedule 30.08.2008
comment
Проверка времени компиляции не заменяет тестирование ... Я не совсем понимаю жалобу на python, что он требует большого количества модульного тестирования, поскольку весь код должен ... То, что что-то компилируется, не означает, что это будет работать! - person dbr; 05.11.2008
comment
‹Взрывозащищенный› Я бы хотел услышать, где интерфейс действительно повлиял на любой написанный вами код Python. - person Gregg Lind; 03.03.2009
comment
Отсутствие интерфейсов? Его динамичный язык. Кроме того, нужно быть достаточно умным, чтобы в любом случае избегать ООП. - person dakt; 24.05.2016
comment
Кроме того, нужно быть достаточно умным, чтобы в любом случае избегать ООП. В этом нет никакого смысла. ООП-программирование определенно имеет свое место, но вам необходимо согласовать свою архитектуру с задачей, которую вы пытаетесь выполнить. - person Tim; 31.01.2017
comment
Все программное обеспечение нуждается в модульных тестах, но программное обеспечение на Python требует даже больше, чем на других языках. - person Alph0r; 20.08.2017
comment
Чтобы получить автозавершение синтаксиса в Python при использовании Pycharm или PyDev, установите точку останова внутри функции / метода, которые вы хотите реализовать, запустить там (с помощью модульного теста или чего-то еще) и код внутри консоли. - person aoeu256; 23.11.2017
comment
Что касается плохой IDE, ответ подразумевает - это может быть правдой для 2008 года. Теперь, в 2020 году, pycharm ЧРЕЗВЫЧАЙНО хорош во всем, что вы хотите, и имеет отличную бесплатную версию. - person Gulzar; 21.05.2020

На мой взгляд, Python более чем готов для разработки сложных приложений. Я вижу силу питонов больше на стороне сервера, чем на написании графических клиентов. Но взгляните на http://www.resolversystems.com/. Они разрабатывают целую электронную таблицу на Python, используя порт .net ironpython.

Если вы знакомы с eclipse, обратите внимание на pydev, который обеспечивает поддержку автозаполнения и отладки для Python со всеми другие полезности eclipse, такие как поддержка svn. Разработчик этого продукта только что был куплен aptana, так что это будет надежный выбор на будущее.

@Marcin

Минусы: как динамический язык имеет гораздо худшую поддержку IDE (правильное завершение синтаксиса требует статической типизации, явной в Java или предполагаемой в SML),

Вы правы, что статический анализ может не обеспечить полного завершения синтаксиса для динамических языков, но я думаю, что pydev справляется со своей задачей очень хорошо. Более того, при программировании на Python у меня другой стиль разработки. У меня всегда открыт сеанс ipython, и с одним F5 я не только получаю идеальное завершение от ipython, но и самоанализ и манипулирование объектами.

Но если вы хотите написать второй Google или Yahoo, вам будет намного лучше с C # или Java.

Google просто переписал jaiku, чтобы он работал поверх App Engine, все на Python. И, насколько мне известно, внутри Google тоже много питона.

person Peter Hoffmann    schedule 30.08.2008
comment
В настоящее время Google реконструирует некоторые из своих продуктов (Youtube и т. Д.) С использованием C ++ из-за проблем с производительностью, реализованных в Python. - person Lakindu Akash; 20.08.2018

Мне очень нравится питон, обычно это мой язык в наши дни для небольших (не связанных с графическим интерфейсом) вещей, которые я делаю самостоятельно.

Однако для некоторых более крупных проектов Python, которыми я занимался, я обнаружил, что это не совсем то же самое, что программирование, скажем, на C ++. Я работал над синтаксическим анализатором языка, и мне нужно было представить AST на Python. Это, безусловно, входит в рамки возможностей Python, но у меня возникли некоторые проблемы с рефакторингом. Я менял представление своего AST и много менял методы и классы, и я обнаружил, что пропустил строгую типизацию, которая была бы доступна мне в решении C ++. Утиная типизация Python была почти слишком гибкой, и я обнаружил, что добавляю много assert кода, чтобы попытаться проверить свои типы во время работы программы. И тогда я не мог быть уверен, что все было правильно набрано, если у меня не было 100% тестирования покрытия кода (чего я не делал в то время).

На самом деле, это еще одна вещь, по которой я иногда скучаю. На Python можно написать синтаксически правильный код, который просто не будет работать. Компилятор не может сообщить вам об этом до тех пор, пока он не выполнит код, поэтому в редко используемых путях кода, таких как обработчики ошибок, вы можете легко скрывать невидимые ошибки. Даже такой простой код, как печать сообщения об ошибке со строкой формата%, может дать сбой во время выполнения из-за несоответствия типов.

Я не использовал Python для каких-либо вещей с графическим интерфейсом, поэтому я не могу комментировать этот аспект.

person Greg Hewgill    schedule 30.08.2008
comment
В общем, если вы проверяете типы в Python, значит, вы делаете это неправильно. Канонический стиль в Python заключается не в том, чтобы спрашивать, к какому типу относится объект, а в том, какие методы он поддерживает. Например, вместо того, чтобы спрашивать «Собака?», Вы спрашиваете «Умеешь ли ты лаять?». - person Ryan Ginstrom; 05.11.2008
comment
@RyanGinstrom Насколько я понимаю, он использовал проверку типов для утверждений, а не логики. Это похоже на добавление некоторого запаха статической печати для повышения устойчивости к ошибкам. - person Yury; 17.04.2013

Python считается (среди программистов Python :) отличным языком для быстрого прототипирования. Не так много постороннего синтаксиса, мешающего вашим мыслительным процессам, поэтому большая часть работы, которую вы делаете, как правило, уходит в код. (Для написания хорошего кода Python требуется гораздо меньше идиом, чем для написания хорошего C ++.)

Учитывая это, большинство программистов Python (CPython) приписывают философию «преждевременная оптимизация - корень всех зол». Написав высокоуровневый (и значительно более медленный) код Python, можно оптимизировать узкие места с помощью привязок C / C ++, когда ваше приложение приближается к завершению. На этом этапе становится более ясно, каковы ваши алгоритмы, интенсивно использующие процессор, благодаря правильному профилированию. Таким образом, вы пишете большую часть кода в удобочитаемой и поддерживаемой манере, позволяя при этом ускоряться в будущем. Именно по этой причине вы увидите несколько библиотечных модулей Python, написанных на C.

Большинство графических библиотек в Python (например, wxPython) в любом случае являются просто оболочками Python для библиотек C ++, поэтому вы в значительной степени пишете на бэкэнд C ++.

Чтобы ответить на ваш вопрос IDE, SPE (редактор Python Stani) - хорошая среда IDE, которую я использовал и Eclipse с PyDev тоже выполняет свою работу. Оба являются OSS, поэтому их можно попробовать бесплатно!

[Edit] @Marcin: Был ли у вас опыт написания> 30k LOC на Python? Также забавно, что вы упомянули проблемы масштабируемости Google, поскольку они самые большие сторонники Python! Также небольшая организация под названием НАСА также часто использует Python;) см. «Один кодировщик и 17 000 строк кода позже. ".

person cdleary    schedule 30.08.2008
comment
Это хорошо для одного кодировщика ... как насчет проектов с большим количеством переходных кодеров и кодом более 17К? Кто-нибудь знает, остается ли там легко обслуживаться? - person rogerdpack; 01.07.2011

К другим ответам нечего добавить, кроме, что если вы выберете python, вы должны использовать что-то вроде pylint, о котором пока никто не упоминал.

person Davide    schedule 04.11.2008
comment
Да, но все, кого я знаю, кто начинает использовать pylint в существующем коде, делают это только с отключенными многочисленными проверками. - person Acumenus; 29.11.2013

Один из способов понять, для чего используется Python, - это посмотреть, какие продукты используют Python в настоящий момент. На этой странице википедии есть длинный список, включающий различные веб-фреймворки, системы управления контентом, системы контроля версий, настольные приложения и IDE.

Как говорится здесь: «Некоторые из крупнейших проектов, использующих Python - это сервер приложений Zope, YouTube и оригинальный клиент BitTorrent. Крупные организации, использующие Python, включают Google, Yahoo !, CERN и NASA. ITA использует Python для некоторых своих компонентов ».

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

person Hamish Downer    schedule 30.08.2008

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

person pauldoo    schedule 30.08.2008

И, насколько мне известно, внутри Google тоже много питона.

Что ж, я надеюсь, что создатель питона все еще работает в Google, если я не ошибаюсь?

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

person John T    schedule 13.11.2008

Использование Python доставляет удовольствие. Я использую его постоянно, а также пишу много кода для работы на C #. У написания кода пользовательского интерфейса на Python есть два недостатка. Во-первых, не существует единой структуры пользовательского интерфейса, которая была бы принята большинством сообщества. когда вы пишете на C #, среда выполнения .NET и библиотеки классов предназначены для совместной работы. В Python каждая библиотека пользовательского интерфейса имеет собственную семантику, которая часто расходится с питоническим мышлением, в котором вы пытаетесь написать свою программу. Я не виню писателей библиотеки. Я пробовал несколько библиотек (wxwidgets, PythonWin [Wrapper around MFC], Tkinter). При этом я часто чувствовал, что пишу код на языке, отличном от Python (несмотря на то, что это был python), потому что библиотеки не ' в точности pythonic они являются портом с другого языка будь то c, c ++, tk.

Поэтому я буду писать код пользовательского интерфейса в .NET (для меня C #) из-за IDE и согласованности библиотек. Но когда смогу, я напишу бизнес-логику на python, потому что она понятнее и веселее.

person minty    schedule 13.11.2008

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

Если у вас сильная команда, то, вероятно, не проблема, если они знакомы. Но если у вас есть люди старше 9–5 лет, которые не знакомы с технологией, им потребуется дополнительная поддержка, и вам нужно будет позвонить, если повышение производительности будет стоить любой стоимости этой поддержки.

person Martin Clarke    schedule 30.08.2008

У меня был только один опыт работы с питоном, мой проект trash-cli.

Я знаю, что, вероятно, некоторые или все проблемы зависят от моего неопытности с python.

Меня разочаровали следующие вещи:

  1. сложно найти хорошую IDE бесплатно
  2. ограниченная поддержка автоматического рефакторинга

Кроме того:

  1. Меня смущает необходимость введения двух уровней группировки пакетов и модулей.
  2. мне кажется, что нет широко принятого соглашения об именовании кода
  3. мне кажется, что есть некоторые документы стандартных библиотек API, которые неполны
  4. меня раздражает тот факт, что некоторые стандартные библиотеки не являются полностью объектно-ориентированными

Хотя некоторые программисты на Python говорят мне, что у них нет этих проблем, или они говорят, что это не проблемы.

person Andrea Francia    schedule 10.11.2008
comment
Если вы все еще занимаетесь программированием на Python, я рекомендую Eclipse с PyDev. Intype (intype.info/home/index.php) удобен, если вы предпочитаете что-то более легкое. Также PEP 8 является общепринятым руководством по стилю, но, конечно, это зависит от индивидуального программиста. python.org/dev/peps/pep-0008 - person monkut; 13.11.2008
comment
Какой аспект соглашения о коде отсутствует? Я считаю, что чужой код Python обычно очень удобочитаем, потому что часто правильный и быстрый способ является самым простым синтаксически, поэтому люди используют похожие идиомы. - person Gregg Lind; 03.03.2009
comment
@Gregg Lind: некоторые стандартные библиотеки используют this_naming_convention, а некоторые другие используют thisNamingConvention для имен методов. Даже в стандартных библиотеках нет принятого стандарта. - person Andrea Francia; 04.03.2009

Попробуйте Django или Pylons, напишите простое приложение с обоими из них, а затем решите, какое из них вам больше подходит. Есть и другие (например, Turbogears или Werkzeug), но они используются чаще всего.

person Community    schedule 10.08.2010
comment
Все это веб-фреймворки; как насчет приложений, не основанных на Интернете? - person rakslice; 15.02.2016