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

StackOverflow https://stackoverflow.com/questions/35753

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

@Марцин

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

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

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

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

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

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

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

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

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

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

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

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

[Редактировать] @Марцин:Был ли у вас опыт написания > 30 тыс. LOC на Python?Также забавно, что вы упомянули проблемы масштабируемости Google, поскольку они являются крупнейшими сторонниками Python!Также небольшая организация под названием NASA также часто использует Python;) см. «Один программист и 17 000 строк кода спустя».

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

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

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

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

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

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

Ну, я надеюсь, что создатель Python все еще работает в Google, если я не ошибаюсь?

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

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

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

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

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

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

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

Меня расстраивают следующие вещи:

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

Более того:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top