Python은 웹 기반이 아닌 대규모 소프트웨어 프로젝트에 적합합니까?

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

  •  09-06-2019
  •  | 
  •  

문제

지금은 주로 C/C++로 개발하고 있지만 일부 작업을 자동화하기 위해 Python으로 몇 가지 작은 유틸리티를 작성했으며 언어로서(특히 생산성) 정말 마음에 듭니다.

성능(Python과 C 모듈의 용이한 인터페이스 덕분에 때때로 해결될 수 있는 문제)을 제외하고 독립 실행형 복잡한 응용 프로그램 개발 시 프로덕션 용도로 적합하다고 생각하십니까(예를 들어 워드 프로세서를 생각해 보십시오) 또는 그래픽 도구)?

어떤 IDE를 제안하시겠습니까?Python에서 제공하는 IDLE은 소규모 프로젝트에도 충분하지 않다고 생각합니다.

도움이 되었습니까?

해결책

우리는 IronPython을 사용하여 주력 스프레드시트 애플리케이션(40kloc 프로덕션 코드 - Python입니다. IMO는 기능당 loc이 낮다는 것을 의미함)을 구축했습니다. 리졸버 시스템, 따라서 복잡한 앱의 프로덕션 용도로 사용할 준비가 되었다고 확실히 말하고 싶습니다.

이것이 유용한 답변이 아닐 수 있는 두 가지 방법이 있습니다. :-)

  1. 우리는 일반적인 CPython이 아닌 IronPython을 사용하고 있습니다.이는 .NET 클래스 라이브러리를 사용할 수 있다는 큰 이점을 제공합니다.나는 여기서 불타오르려고 준비하고 있을지 모르지만 "전문적"으로 보이는 CPython 응용 프로그램을 실제로 본 적이 없다고 말하고 싶습니다. 따라서 WinForms 위젯 세트에 액세스할 수 있는 것은 우리에게 큰 승리였습니다.IronPython은 성능 향상이 필요한 경우 C#을 쉽게 사용할 수 있다는 이점도 제공합니다.(솔직히 말해서 우리는 절대 그렇게 하는 데 필요합니다.지금까지의 모든 성능 문제는 언어가 느리기보다는 멍청한 알고리즘을 선택했기 때문에 발생했습니다.) IP에서 C#을 사용하는 것은 CPython용 C 확장을 작성하는 것보다 훨씬 쉽습니다.
  2. 우리는 익스트림 프로그래밍 상점이므로 코드를 작성하기 전에 테스트를 작성합니다.테스트를 먼저 작성하지 않고서는 동적 언어로 프로덕션 코드를 작성하지 않을 것입니다.컴파일 단계의 부족은 무언가로 해결되어야 하며, 다른 사람들이 지적했듯이 그것 없이 리팩토링하는 것은 어려울 수 있습니다.(Greg Hewgill의 답변은 그도 같은 문제를 겪었음을 암시합니다.반면에 나는 프로덕션 코드를 작성하거나 특히 리팩터링할 것이라고 생각하지 않습니다. 어느 요즘에는 테스트를 먼저 작성하지 않고 언어를 사용하지만 YMMV입니다.)

답장:IDE - 우리는 각 사람이 자신이 가장 좋아하는 텍스트 편집기를 사용하는 것에 대해 꽤 괜찮았습니다.좀 더 무거운 것을 선호한다면 WingIDE 꽤 좋은 평가를 받고 있습니다.

다른 팁

이에 대한 대답은 대부분 두 가지입니다. 바로 종교적인 대답입니다(예!물론!그것은 최고의 언어입니다!) 그리고 다른 종교적인 언어(농담이군요!)파이썬?아니요...충분히 성숙하지 않았습니다).마지막 종교(파이썬?!)는 건너뛰겠습니다.루비를 사용하세요!).언제나 그렇듯이 진실은 명백하지 않습니다.

장점:쉽고 읽기 쉬우며 배터리가 포함되어 있고 거의 모든 것을 위한 좋은 라이브러리가 많이 있습니다.표현력이 풍부하고 역동적인 타이핑으로 인해 많은 경우에 더 간결해집니다.

단점:동적 언어로서 IDE 지원이 훨씬 나쁩니다(적절한 구문 완성) 필요하다 정적 타이핑(Java에서 명시적이든 SML에서 추론하든 관계 없음)의 객체 시스템은 완벽하지 않으며(인터페이스, 누구?) int, boolean 또는 객체 또는 일종의 종류를 반환하는 메서드가 있는 지저분한 코드로 끝나기 쉽습니다. 알 수 없는 상황.

내 생각 – 저는 스크립팅, 자동화, 작은 웹앱 및 기타 단순하고 잘 정의된 작업에 Python을 좋아합니다.내 생각엔 아직까지는 그렇다. 최고 지구상의 역동적인 언어.즉, 나는 그럴 것이다 절대 그걸 써 어느 상당한 크기의 애플리케이션을 개발하기 위한 동적 유형 언어입니다.

예를 들어, 세 명의 개발자가 있고 코드 길이가 30,000줄을 넘지 않는 Stack Overflow에 사용하면 좋을 것 같습니다.더 큰 일의 경우 처음에는 개발 속도가 매우 빨라지고 팀과 코드베이스가 성장하면 Java나 C#을 사용할 때보다 작업 속도가 더 느려집니다.더 많은 단위 테스트를 작성하여 컴파일 시간 검사 부족을 상쇄해야 하며, 리팩토링은 더 어려워집니다. 모든 테스트나 심지어 전체 큰 앱 등을 실행할 때까지 재구성이 무엇을 망쳤는지 알 수 없기 때문입니다.

이제 팀의 규모와 완료 후 앱의 규모를 결정하세요.인원이 5명 이하이고 목표 크기가 대략 스택 오버플로라면 Python으로 작성하세요.당신은 곧 끝내고 좋은 코드베이스에 만족할 것입니다.하지만 제2의 Google이나 Yahoo를 작성하고 싶다면 C#이나 Java를 사용하는 것이 훨씬 더 나을 것입니다.

당신이 언급한 C/C++에 대한 참고 사항:성능이 중요한 소프트웨어(영화를 렌더링하는 데 3개월 동안 실행되는 대규모 병렬 광선 추적기 등)나 매우 중요한 시스템(예를 들어 3년 연속 비행하고 착륙 기회가 단 한 번만 있는 화성 착륙선 등)을 작성하지 않는 경우, 그렇지 않으면 패배하게 됩니다. 4억 달러) 사용하지 마세요.웹 앱, 대부분의 데스크톱 앱, 일반적으로 대부분의 앱의 경우 좋은 선택이 아닙니다.복잡한 비즈니스 로직에서는 디버깅 포인터와 메모리 할당이 필요하지 않습니다.

제 생각에는 Python은 복잡한 응용 프로그램을 개발하는 데 준비가 ​​되어 있는 것 이상입니다.나는 그래픽 클라이언트를 작성하는 것보다 서버 측에서 Python의 강점을 더 많이 봅니다.하지만 한번보세요 http://www.resolversystems.com/.그들은 .net ironpython 포트를 사용하여 Python으로 전체 스프레드시트를 개발합니다.

Eclipse에 익숙하다면 다음을 살펴보십시오. 피데브 이는 svn 지원과 같은 다른 모든 Eclipse 기능과 함께 Python에 대한 자동 완성 및 디버깅 지원을 제공합니다.개발하던 사람이 방금 구입했어요 압타나, 따라서 이것은 미래를 위한 확실한 선택이 될 것입니다.

@마르신

단점:역동적 인 언어로서, IDE 지원이 훨씬 나빠집니다 (적절한 구문 완료에는 Java에서 명시 적이든 SML에서 유추되는지 여부에 관계없이 정적 타이핑이 필요합니다).

당신 말이 맞습니다. 정적 분석은 동적 언어에 대한 전체 구문 완성을 제공하지 못할 수도 있지만 pydev가 작업을 매우 잘 수행한다고 생각합니다.게다가 저는 파이썬을 프로그래밍할 때 개발 스타일이 다릅니다.저는 항상 ipython 세션을 열어두고 F5 키를 누르면 ipython에서 완벽한 완성을 얻을 수 있을 뿐만 아니라 객체 검사 및 조작도 수행할 수 있습니다.

그러나 두 번째 Google 또는 Yahoo를 작성하려면 C# 또는 Java를 사용하면 훨씬 나을 것입니다.

Google이 방금 Jaiku를 다시 작성했습니다. App Engine을 기반으로 모두 Python으로 작업합니다.그리고 내가 아는 한 그들은 Google 내부에서도 Python을 많이 사용합니다.

저는 Python을 정말 좋아합니다. 요즘에는 제가 스스로 하는 작은(GUI가 아닌) 작업을 위해 Python을 선택하는 언어입니다.

그러나 내가 다루었던 일부 대규모 Python 프로젝트의 경우 C++ 프로그래밍과 완전히 동일하지 않다는 것을 알았습니다.저는 언어 파서 작업을 하고 있었고 Python에서 AST를 표현해야 했습니다.이것은 확실히 Python이 할 수 있는 범위 내에 있지만 일부 리팩토링에 약간의 문제가 있었습니다.나는 AST의 표현을 변경하고 메서드와 클래스를 많이 변경하고 있었는데 C++ 솔루션에서 사용할 수 있는 강력한 타이핑이 그리워졌습니다.Python의 오리 타이핑은 거의 ~도 유연성이 있어서 많은 것을 추가할 수 있었습니다. assert 프로그램이 실행될 때 내 유형을 확인하는 코드입니다.그리고 100% 코드 적용 범위 테스트(당시에는 수행하지 않음)를 거치지 않는 한 모든 것이 제대로 입력되었는지 확신할 수 없었습니다.

사실 그게 제가 가끔 그리워하는 또 다른 일이에요.단순히 실행되지 않는 Python에서 구문적으로 올바른 코드를 작성하는 것이 가능합니다.컴파일러는 실제로 코드를 실행할 때까지 이를 알려줄 수 없으므로 오류 처리기와 같이 자주 사용되지 않는 코드 경로에는 보이지 않는 버그가 숨어 있을 수 있습니다.% 형식 문자열을 사용하여 오류 메시지를 인쇄하는 것처럼 간단한 코드라도 유형이 일치하지 않아 런타임 시 실패할 수 있습니다.

나는 GUI 관련 작업에 Python을 사용하지 않았으므로 해당 측면에 대해 언급할 수 없습니다.

Python은 (Python 프로그래머들 사이에서 :) 신속한 프로토타이핑을 위한 훌륭한 언어로 간주됩니다.사고 과정을 방해하는 외부 구문이 많지 않으므로 수행하는 대부분의 작업은 코드에 포함되는 경향이 있습니다.(좋은 C++를 작성하는 것보다 좋은 Python 코드를 작성하는 데 필요한 관용어가 훨씬 적습니다.)

이를 감안할 때 대부분의 Python(CPython) 프로그래머는 "성급한 최적화는 모든 악의 근원"이라는 철학에 속합니다.높은 수준의(그리고 상당히 느린) Python 코드를 작성하면 애플리케이션이 거의 완료될 때 C/C++ 바인딩을 사용하여 병목 현상을 최적화할 수 있습니다.이 시점에서는 적절한 프로파일링을 통해 프로세서 집약적인 알고리즘이 무엇인지 더 명확해집니다.이렇게 하면 대부분의 코드를 매우 읽기 쉽고 유지 관리하기 쉬운 방식으로 작성하는 동시에 앞으로 속도를 높일 수 있습니다.바로 이러한 이유로 C로 작성된 여러 Python 라이브러리 모듈을 볼 수 있습니다.

Python의 대부분의 그래픽 라이브러리(예:wxPython)은 어쨌든 C++ 라이브러리를 둘러싼 Python 래퍼이므로 C++ 백엔드에 거의 작성하고 있습니다.

IDE 질문을 해결하려면, SPE (Stani의 Python Editor)는 제가 사용해 본 좋은 IDE입니다. ~와 함께 파이데브 일도 끝내고.둘 다 OSS이므로 무료로 사용해 볼 수 있습니다!

[편집] @Marcin:Python으로 30,000개 이상의 LOC를 작성한 경험이 있습니까?Google이 Python의 가장 큰 지지자이기 때문에 Google의 확장성 문제를 언급해야 한다는 것도 재밌습니다!NASA라는 소규모 조직에서도 Python을 자주 사용합니다. ;) 참조 "하나의 코더와 나중에 17,000줄의 코드".

다른 답변에 추가할 내용이 없습니다. 게다가 Python을 선택하면 ~ 해야 하다 다음과 같은 것을 사용하십시오 필린트 지금까지 아무도 언급하지 않았습니다.

Python이 어떤 용도로 사용되는지 판단하는 한 가지 방법은 현재 Python을 사용하는 제품이 무엇인지 살펴보는 것입니다.이것 위키피디아 페이지 다양한 웹 프레임워크, 콘텐츠 관리 시스템, 버전 제어 시스템, 데스크톱 앱 및 IDE를 포함한 긴 목록이 있습니다.

그것이 말하는 것처럼 여기 - "Python을 사용하는 가장 큰 프로젝트로는 Zope 애플리케이션 서버, YouTube 및 원래 BitTorrent 클라이언트가 있습니다.Python을 사용하는 대규모 조직에는 Google, Yahoo!, CERN 및 NASA가 있습니다.ITA는 일부 구성 요소에 Python을 사용합니다."

간단히 말해서, "독립형 복잡한 응용 프로그램 개발 시 프로덕션 용도로 적합"합니다.다양한 장단점이 있는 다른 많은 언어도 마찬가지입니다.귀하의 특정 사용 사례에 가장 적합한 언어는 너무 주관적이어서 답변해 드리지는 않겠지만, 종종 답변은 "개발자가 가장 잘 아는 언어"일 것입니다.

더 큰 코드베이스에서는 리팩토링이 불가피하며 정적 유형 지정이 없기 때문에 Python에서는 정적 유형 언어보다 리팩토링이 훨씬 더 어렵습니다.

그리고 내가 아는 한 그들은 Google 내부에서도 Python을 많이 사용합니다.

글쎄요, 제가 착각하지 않는다면 Python 제작자는 여전히 Google에서 일하고 있기를 바랍니다.

Python의 사용에 관해서는 독립형 앱을 위한 훌륭한 언어라고 생각합니다.이는 많은 Linux 프로그램에서 많이 사용되며 GUI 개발에 도움이 되는 몇 가지 멋진 위젯 세트가 있습니다.

Python은 사용하기 좋습니다.나는 그것을 일상적으로 사용하고 C# 작업을 위해 많은 코드를 작성합니다.Python으로 UI 코드를 작성하는 데에는 두 가지 단점이 있습니다.하나는 대다수의 커뮤니티에서 승인되는 단일 UI 프레임워크가 없다는 것입니다.C#으로 작성할 때 .NET 런타임과 클래스 라이브러리는 모두 함께 작동하도록 되어 있습니다.Python을 사용하면 모든 UI 라이브러리에는 프로그램을 작성하려는 Python 사고 방식과 종종 상충되는 고유한 의미가 있습니다.나는 도서관 작가들을 비난하는 것이 아닙니다.나는 여러 라이브러리(wxwidgets, PythonWin[Wrapper around MFC], Tkinter)를 사용해 보았지만 그렇게 할 때 Python이 아닌 다른 언어로 코드를 작성하고 있다는 느낌을 자주 받았습니다(Python이라는 사실에도 불구하고). 정확하게는 파이썬적이지 않습니다. c, c++, tk 등 다른 언어의 포트입니다.

그래서 저는 IDE와 라이브러리의 일관성 때문에 .NET(저의 경우 C#)에서 UI 코드를 작성하겠습니다.하지만 가능하다면 Python으로 비즈니스 로직을 작성하겠습니다. Python이 더 명확하고 재미있기 때문입니다.

분명 당연한 말을 하고 있다는 것을 알지만, 개발 팀의 품질과 기술에 대한 친숙도가 여러분의 서비스 제공 능력에 큰 영향을 미칠 것이라는 점을 잊지 마십시오.

강력한 팀이 있다면 그들이 친숙하다면 문제가 되지 않을 것입니다.그러나 기술에 익숙하지 않은 9~5세 이상의 사람들이 있는 경우에는 더 많은 지원이 필요하며 해당 지원 비용이 무엇이든 생산성 향상이 가치가 있는지 확인해야 합니다.

저는 python 경험이 하나밖에 없었습니다. Trash-cli 프로젝트였습니다.

나는 아마도 일부 또는 모든 문제가 Python에 대한 경험이 부족하여 발생한다는 것을 알고 있습니다.

나는 다음과 같은 것들이 실망스럽다고 생각했습니다.

  1. 무료로 좋은 IDE를 찾는 것이 어렵습니다.
  2. 자동 리팩토링에 대한 제한된 지원

게다가:

  1. 두 가지 수준의 패키지와 모듈 그룹화를 도입해야 한다는 사실이 혼란스럽습니다.
  2. 제가 보기에는 널리 채택되는 코드 명명 규칙이 없는 것 같습니다.
  3. 제가 보기에는 일부 표준 라이브러리 API 문서가 불완전한 것 같습니다.
  4. 일부 표준 라이브러리가 완전히 객체 지향적이지 않다는 사실이 나를 짜증나게 합니다.

일부 Python 코더는 이러한 문제가 없다고 말하거나 문제가 아니라고 말합니다.

Django 또는 Pylons를 사용해 보고 두 가지를 모두 사용하여 간단한 앱을 작성한 다음 어느 것이 가장 적합한지 결정하세요.Turbogears 또는 Werkzeug와 같은 다른 것들도 있지만 가장 많이 사용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top