4

私たちの会社(xyz)は、多くのFlashコードをPythonに移行しています。

Flashには、Flashアプリ間で共有ライブラリ(パッケージxyz)があります。Flashはコードをコンパイルし、ライブラリのコンテンツを含むため、デプロイ時に他のアプリを壊すことを恐れずにパッケージに変更を加えることができます。最終的なSWFをRPM経由でデプロイし、完了です。App1とApp2を更新しても、App3が破損することはありません。

共有ライブラリの依存関係であるPythonでこれにどのようにアプローチしますか。

App1、App2、およびApp3はすべてxyz-lib.rpmを必要とし、すべて同じライブラリファイルを使用しますが、新しいライブラリが存在するたびに、更新されたxyz-lib.rpmをApp1,2,3に対して明示的にテストする必要があります。 、そしてこれは面倒です。

私の現在のお気に入りのソリューション-app1.rpmに、パッケージ化されたときからライブラリを含めることができます-事実上、ライブラリのある種の静的リンク。しかし、これはエレガントではないと感じます。(ただし、追加コストはハードドライブのスペース==安いだけです。)

共有ライブラリをしっかりと管理することがおそらく最善の解決策であることは知っていますが、すべての開発者が人間であり、間違いを犯すことを考慮に入れています。私たちは間違いを犯すつもりです、そして私はapp1の展開がapp2とapp3を壊したくありません-それはテストとデバッグのためにもっとたくさんあります。

4

3 に答える 3

4

「新しいライブラリが存在するたびにApp1、2、3に対して明示的にテストされた」というのは、実際にはそれほど面倒ではありません。

2つのこと。

  • ライブラリが合格する必要のあるAPIユニットテストの正式なセットが必要です。これは単なるAPIであり、機能のすべてのニュアンスではありません。これに合格すれば、変更を加えることができます。これが失敗した場合、変更によってAPIが破損しました。

  • APIとは別に、機能の単体テストのセットも必要です。これはより大きく、「厄介」に分類される可能性があります。

ユニットテストを開始すると、中毒になります。適度に完了したテストがあれば、この問題は簡単に管理できます。

于 2008-12-04T23:30:12.170 に答える
1

また、すべてをまとめて、OSライブラリへの依存を最小限に抑えるソリューションを好みます(glibcとそれだけです)。ハードドライブは安価ですが、顧客とサポートの時間はそうではありません。

Windowsでは、py2exe+InnoSetupを使用すれば簡単です。

Linuxでは、bbfreezeがこれを処理する正しい方法のようです。ホームページから引用すると、次のようになります。

  • zip / eggファイルのインポート追跡:bbfreezeはzipファイルからのインポートを追跡し、eggfileから一部のモジュールが使用されている場合はeggファイル全体を含みます。setuputilsのpkg_resourcesモジュールを使用するパッケージが機能するようになりました(0.95.0の新機能)
  • バイナリ依存関係の追跡:bbfreezeはバイナリ依存関係を追跡し、フリーズされたプログラムに必要なDLLと共有ライブラリを含みます。
于 2008-12-05T11:41:39.867 に答える
1

このクックブックエントリのバリエーションを使用して、 Pythonアプリを配布しました。基本的には、すべてのPythonソースをzipファイルに圧縮し、それをシェルスクリプトと連結してソースファイルをインポートする必要があります。

これは、アプリに独自のバージョンのライブラリを提供する必要がある場合に役立ちます。

于 2008-12-04T23:34:10.993 に答える