Python は大規模なソフトウェア プロジェクト (Web ベースではない) に適していますか?

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

  •  09-06-2019
  •  | 
  •  

質問

現在、私は主に C/C++ で開発していますが、一部のタスクを自動化するために Python でいくつかの小さなユーティリティを作成しました。言語としてのPythonがとても気に入っています (特に生産性)。

パフォーマンスを除けば (この問題は、Python と C モジュールのインターフェイスが容易なおかげで解決できることもあります)、スタンドアロンの複雑なアプリケーション (ワード プロセッサなどを考えてください) の開発における実稼働環境での使用に適していると思いますか?またはグラフィックツール)?

どのような IDE をお勧めしますか?私の意見では、Python に付属の IDLE は小規模なプロジェクトであっても十分ではありません。

役に立ちましたか?

解決

私たちは、IronPython を使用して、主力のスプレッドシート アプリケーション (40kloc の製品コード - Python です。IMO では、機能ごとの loc が低いことを意味します) を構築しました。 レゾルバシステム, そのため、複雑なアプリを本番環境で使用する準備ができていると断言できます。

これがあなたにとって有益な答えではない可能性が 2 つあります :-)

  1. ここでは、一般的な CPython ではなく、IronPython を使用しています。これにより、.NET クラス ライブラリを使用できるという大きな利点が得られます。ここで炎上するつもりかもしれませんが、「プロフェッショナル」に見える CPython アプリケーションを実際に見たことがないと言えます。そのため、WinForms ウィジェット セットにアクセスできることは、私たちにとって大きな勝利でした。IronPython には、パフォーマンスの向上が必要な場合に簡単に C# を導入できるという利点もあります。(正直に言うと、 一度もない それをするために必要でした。これまでのパフォーマンスの問題はすべて、言語が遅かったためではなく、愚かなアルゴリズムを選択したことが原因でした。) IP から C# を使用することは、CPython 用の C 拡張機能を作成するよりもはるかに簡単です。
  2. 私たちはエクストリーム プログラミング ショップなので、コードを書く前にテストを書きます。私なら、最初にテストを書かずに動的言語で製品コードを書くことはありません。コンパイルステップの欠如は何かでカバーする必要があり、他の人が指摘したように、コンパイルステップなしでのリファクタリングは困難になる可能性があります。(Greg Hewgill の答えは、彼も同じ問題を抱えていたことを示唆しています。一方で、私は運用コードを書く、特にリファクタリングするつもりはないと思います。 どれでも 最近では、最初にテストを書かずに言語を使用しています - ただし、YMMV。)

Re:IDE - 私たちは、各人がお気に入りのテキスト エディタを使用することにほとんど問題ありませんでした。もう少し重いものを好む場合は、 WingIDE かなり評判が良いです。

他のヒント

それに対する答えは主に 2 つあります。それは宗教的なものです (はい!もちろん!これは史上最高の言語です!) そしてもう 1 つは宗教的な言語です (冗談でしょう!)。パイソン?いいえ...十分に成熟していません)。最後の宗教 (Python?!) は多分スキップします。ルビィを使ってください!)。いつものように、真実は明らかではありません。

長所:簡単で読みやすく、バッテリーも付属しており、ほとんどすべてのものに適した優れたライブラリがたくさんあります。表現力豊かで動的な型付けにより、多くの場合、より簡潔になります。

短所:動的言語としては、IDE サポートがはるかに劣っています (適切な構文補完 必要 静的型付け(Java で明示的であるか、SML で推論されるか)、そのオブジェクト システムは完璧とは程遠く(インターフェイス、誰か?)、int か boolean か object か何らかのソートを返すメソッドを持つ乱雑なコードになりがちです。未知の状況。

私の意見 – 私は、スクリプト作成、自動化、小さな Web アプリ、その他の明確に定義された単純なタスクに Python が大好きです。私の意見では、それははるかにそうです 最高の 地球上の動的な言語。そうは言っても、私ならそうします 一度もない これを使って どれでも かなりのサイズのアプリケーションを開発するための動的型付け言語。

たとえば、Stack Overflow に使用するのは問題ありません。Stack Overflow には 3 人の開発者がおり、おそらくコードは 30,000 行を超えないと思われます。さらに大きなこととしては、まず開発が非常に高速になりますが、チームとコードベースが成長すると、Java や C# よりも遅くなります。より多くの単体テストを作成することでコンパイル時間チェックの欠如を補う必要があります。すべてのテスト、さらには大きなアプリ全体を実行するまで、リファクタリングで何が壊れたのかわからないため、リファクタリングはより困難になります。

次に、チームの規模と、完成後のアプリの規模を決定します。人数が 5 人以下で、ターゲット サイズがおおよそ Stack Overflow である場合は、Python で記述してください。すぐに完了し、優れたコードベースに満足できるでしょう。しかし、2 番目の Google または Yahoo を作成したい場合は、C# または Java の方がはるかに優れています。

あなたが言及したC/C++に関する補足:パフォーマンスが重要なソフトウェア (映画をレンダリングするために 3 か月間実行される大規模な並列レイトレーサーなど) や非常にミッションクリティカルなシステム (たとえば、3 年連続で飛行し、正しく着陸するチャンスが 1 回しかない火星着陸船など) を作成していない場合は、 4億ドル)は使用しないでください。Web アプリ、ほとんどのデスクトップ アプリ、一般的なほとんどのアプリの場合、これは良い選択ではありません。複雑なビジネス ロジックでのポインターとメモリ割り当てをデバッグするのは大変です。

私の意見では、Python は複雑なアプリケーションを開発する準備が十分に整っています。私は、Python の強みはグラフィカル クライアントを作成するよりもサーバー側にあると考えています。でも見てください http://www.resolversystems.com/. 。彼らは、.net IronPython ポートを使用して、スプレッドシート全体を Python で開発しました。

Eclipse に詳しい場合は、こちらをご覧ください。 pydev これは、svn サポートなどの他のすべての Eclipse 機能とともに、Python のオートコンプリートとデバッグのサポートを提供します。それを開発していた人はつい最近買収されたばかりです アプタナ, したがって、これは将来的に確実な選択となるでしょう。

@マルシン

短所:ダイナミック言語として、IDEサポートがはるかに悪い(適切な構文の完了には、Javaで明示的であろうとSMLで推測されるかどうかにかかわらず、静的タイピングが必要です)、

おっしゃるとおり、静的解析では動的言語の完全な構文補完が提供されない可能性がありますが、pydev はその仕事を非常にうまく実行すると思います。さらに、Python をプログラミングするときは、異なる開発スタイルを採用しています。私は常に ipython セッションを開いているので、F5 を 1 回押すだけで、ipython から完璧な完了が得られるだけでなく、オブジェクトのイントロスペクションと操作も同様に得られます。

しかし、2番目のGoogleまたはYahooを作成したい場合は、C#またはJavaを使用するとはるかに優れています。

Google が jaiku を書き換えた App Engine 上ですべて Python で動作します。そして、私の知る限り、Google 内でも多くの Python が使用されています。

私は Python がとても好きで、最近は自分で行う小さな (GUI 以外の) 作業によく使用する言語です。

ただし、私が取り組んだいくつかの大規模な Python プロジェクトでは、それが C++ などのプログラミングとまったく同じではないことがわかりました。私は言語パーサーに取り組んでおり、Python で AST を表す必要がありました。これは確かに Python でできる範囲内ですが、リファクタリングで少し問題がありました。AST の表現を変更し、メソッドやクラスを大幅に変更していましたが、C++ ソリューションで利用できる強力な型付けを見逃していたことに気付きました。Python のダックタイピングはほぼ完了しました あまりにも 柔軟性があり、自分で多くの機能を追加していることに気づきました assert プログラムの実行時に型をチェックしようとするコード。そして、100% のコード カバレッジ テスト (当時はテストしませんでした) を行わない限り、すべてが適切に型付けされているかどうかを実際に確信することはできませんでした。

実際、それは私が時々恋しく思うもう一つのことです。Python で構文的に正しいコードを書いても、実行されない可能性があります。コンパイラーは、実際にコードを実行するまでそれについて知らせることができないため、エラー ハンドラーなど、あまり使用されないコード パスには、目に見えないバグが潜んでいる可能性があります。% フォーマット文字列を使用してエラー メッセージを出力するような単純なコードでも、型の不一致により実行時に失敗する可能性があります。

私は Python を GUI に使用したことがないので、その点についてはコメントできません。

Python は (Python プログラマーの間では:) ラピッド プロトタイピングに最適な言語であると考えられています。思考プロセスの邪魔になる無関係な構文があまりないため、作業のほとんどはコード内で行われる傾向があります。(優れた Python コードを作成するために必要なイディオムは、優れた C++ を作成する場合よりもはるかに少なくなります。)

このことを踏まえると、ほとんどの Python (CPython) プログラマーは「時期尚早の最適化が諸悪の根源である」という哲学を信じています。高レベルの (そしてかなり遅い) Python コードを作成すると、アプリケーションが完成に近づいたときに C/C++ バインディングを使用してボトルネックを最適化できます。この時点で、適切なプロファイリングを通じて、プロセッサを大量に使用するアルゴリズムが何であるかがより明確になります。こうすることで、ほとんどのコードを非常に読みやすく保守しやすい方法で記述できると同時に、将来的には高速化が可能になります。まさにこの理由から、C で書かれた Python ライブラリ モジュールがいくつか見られます。

ほとんどのグラフィックス ライブラリは Python で作られています (つまり、wxPython) は C++ ライブラリの単なる Python ラッパーであるため、ほとんど C++ バックエンドに書き込むことになります。

IDE の質問に答えるには、 SPE (Stani の Python Editor) は私が使用した優れた IDE です。 日食PyDev 仕事も終わらせます。どちらもOSSなので無料で試せます!

[編集] @マルシン:Python で 30,000 以上の LOC を書いた経験はありますか?Google は Python の最大の支持者であるため、Google のスケーラビリティに関する懸念について言及する必要があるのも面白いことです。また、NASA という小さな組織も Python を頻繁に使用しています ;) を参照してください。 「1 人のコーダーと 17,000 行のコード」.

他の回答に追加するものは何もありません。 その上 Python を選択すると、 しなければならない のようなものを使用します パイリント これまで誰も言及しませんでした。

Python が何に使用されているかを判断する 1 つの方法は、現時点でどの製品が Python を使用しているかを調べることです。これ ウィキペディアのページ には、さまざまな Web フレームワーク、コンテンツ管理システム、バージョン管理システム、デスクトップ アプリ、IDE などの長いリストがあります。

それが言うように ここ - 「Python を使用する最大規模のプロジェクトには、Zope アプリケーション サーバー、YouTube、オリジナルの BitTorrent クライアントなどがあります。Python を利用している大規模組織には、Google、Yahoo!、CERN、NASA などがあります。ITA は一部のコンポーネントに Python を使用しています。」

つまり、「スタンドアロンの複雑なアプリケーションの開発における運用環境での使用に適している」ということです。他の多くの言語も同様で、さまざまな長所と短所があります。特定のユースケースに最適な言語はどれかということは主観的すぎて答えることができないため、試しませんが、多くの場合、答えは「開発者が最もよく知っている言語」になるでしょう。

大規模なコードベースではリファクタリングが避けられませんが、静的型付けがないため、Python では静的型付け言語よりもリファクタリングがはるかに困難になります。

そして、私の知る限り、Google 内でも多くの Python が使用されています。

そうだといいのですが、私の記憶違いでなければ、Python の作成者は今でも Google で働いているんですか?

Python の使用に関しては、Python はスタンドアロン アプリに最適な言語だと思います。これは多くの Linux プログラムで頻繁に使用されており、GUI の開発を支援する優れたウィジェット セットがいくつかあります。

Python は使うのが楽しいです。私はこれを日常的に使用しており、仕事で多くのコードを C# で作成しています。Python で UI コードを記述することには 2 つの欠点があります。1 つは、コミュニティの大多数に受け入れられる UI フレームワークが 1 つも存在しないことです。C# で記述する場合、.NET ランタイムとクラス ライブラリはすべて連携して動作するように設計されています。Python では、すべての UI ライブラリに独自のセマンティクスがあり、プログラムを作成しようとしている Python の考え方と矛盾することがよくあります。私はライブラリの作者を責めているわけではありません。私はいくつかのライブラリ (wxwidgets、PythonWin[MFC のラッパー]、Tkinter) を試しました。その際、(Python であるにもかかわらず) Python 以外の言語でコードを書いているように感じることがよくありました。まさに Python であり、C、C++、tk などの別の言語からの移植です。

したがって、IDE とライブラリの一貫性を考慮して、私は .NET (私の場合は C#) で UI コードを書きます。しかし、できるときは Python でビジネス ロジックを書きます。Python の方が明確で楽しいからです。

おそらく当然のことを述べていることは承知していますが、開発チームの質とテクノロジーへの精通度が開発能力に大きな影響を与えることを忘れないでください。

強いチームの場合、慣れていてもおそらく問題はありません。しかし、テクノロジーに精通していない9歳から5歳以上の人がいる場合は、より多くのサポートが必要になるため、そのサポートにコストがかかっても生産性の向上に価値がある場合は、電話をかける必要があります。

私が Python を使用した経験は、trash-cli プロジェクトの 1 つだけでした。

おそらく一部またはすべての問題は、私の Python の経験不足に依存していることはわかっています。

私は次のような点で不満を感じました。

  1. 無料で優れた IDE を見つけるのは難しい
  2. 自動リファクタリングの限定的なサポート

さらに:

  1. パッケージとモジュールを 2 つのレベルでグループ化する必要があるため、私は混乱しています。
  2. 広く採用されているコード命名規則はないようです
  3. 不完全な標準ライブラリ API ドキュメントがいくつかあるように思えます
  4. 一部の標準ライブラリが完全なオブジェクト指向ではないという事実が気になります

一部の Python コード作成者は、自分にはこれらの問題がないと言うか、問題ではないと言う人もいます。

Django または Pylons を試し、両方を使用して簡単なアプリを作成し、どちらが最適かを判断してください。他にも (Turbogears や Werkzeug など) ありますが、これらが最もよく使用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top