質問

開発用のランタイム環境を定義する必要があります。最初のアイデアは、もちろん車輪を再発明しないことです。 macportsをダウンロードし、easy_installを使用して、finkを試しました。いつも問題がありました。たとえば、現在、MacPortsインストーラーはgcc43をダウンロードしてインストールしようとしているため、scipyをコンパイルできませんが、Snow Leopardではコンパイルできません。この問題にはバグがありますが、基本的にはランタイムを使用できるようにバグに結び付けられています。

先ほど学んだテクニックは、makefileを作成して、明確に指定されたバージョンのライブラリとユーティリティでランタイム/ libをダウンロードしてビルドすることでした。これはMacPorts / fink / aptアプローチよりも前のものですが、すべてを手作業で行う必要がありますが、はるかに細かく制御できます。もちろん、ランタイムが大きくなるとこれは悪夢のようになりますが、問題が見つかった場合は、 patch を使用して、ダウンロードしたパッケージの問題を修正してからビルドできます。

複数の質問があります:

  • 開発用に明確に定義されたランタイム/ライブラリコレクションを準備するテクニックは何ですか?
  • MacPorts / fink / whateverは、何かがうまくいかなかった場合のリハッキングと同じ柔軟性を可能にしますか?
  • メイクファイルソリューションについて、ソフトウェアが最終的にダウンロード可能になったとき、開発環境とユーザーのマシン上の実際のプラットフォーム間の潜在的な問題を解決するための提案は何ですか?

編集:特に理解していないのは、他のプロジェクトからヒントを得られないことです。たとえば、多くの依存関係を持つ複雑なライブラリscipyをダウンロードしました。開発者は、作業する前にすべての依存関係をセットアップする必要があります。それにもかかわらず、この環境を作成するsvnには何もありません。

編集:質問に報奨金を追加しました。これは重要な問題であり、より多くの答えを得るに値すると思います。発生した問題とその解決策に特に注意を払いながら、実世界の例を使用してこれらの回答を最もよく検討します。

バウンティを刺激する追加の質問:

  • ご使用の環境でテストを実行していますか(統合マシンなどで適切なインストールを確認するため)?
  • 出荷時に環境をどのように含めますか? Cの場合、実行可能ファイルを実行する前にLD_LIBRARY_PATHをいじりながら静的にリンクするか、動的ライブラリを出荷しますか? python、perl、およびその他の同じ問題はどうですか?
  • ランタイムに固執しますか、それとも時間が経過するにつれてランタイムを更新しますか? 「トランク」をダウンロードしますか?依存ライブラリのパッケージまたは修正バージョンですか?
  • library fooはpython 2.5を必要としますが、python 2.5ではライブラリバーが動作しないため、python 2.4で開発する必要があります。
役に立ちましたか?

解決

すべての依存関係をダウンロード(主にSVN経由)/ configure / buildするMakefileを生成するCMakeスクリプトを使用します。なぜCMakeなのか?マルチプラットフォーム。これは非常にうまく機能し、scons / autopain / cmakeの呼び出しをサポートします。いくつかのプラットフォーム(Windows、MacOSX、多くのLinuxバリアント)でビルドする際、オペレーティングシステムに基づいて異なるコンパイルフラグなどもサポートします。通常、ライブラリにはデフォルトの構成があり、特別な構成が必要なシステムに遭遇した場合、構成は専用の構成に置き換えられます。これは非常にうまく機能します。目的に合ったすぐに使える解決策は見つかりませんでした。

それは言われていることですが、それを立ち上げて実行するのはPITAです。複数のオペレーティングシステムをサポートする必要があるときに回すべき多くのノブがあります。依存関係はかなり修正されているため、メンテナンスの悪夢になるとは思いません(ライブラリは定期的にアップグレードされますが、新しいものを導入することはめったにありません)。

他のヒント

virtualenv は優れていますが、魔法をかけることはできません-例えばPython 2.4を持たなければならないライブラリと、代わりに絶対に2.5を必要とする別のライブラリを使用したい場合は、運が悪いです。また、Snow Leopardについて述べたように、virtualenv(または他のツール)は、OSの新しいリリースがあり、半分のツール& cがまだサポートしていない場合には役立ちません。同じビルド内で絶対に矛盾するニーズを持つライブラリ)、他のユーザーは忍耐が必要です(必要なすべてのツールが新しいOSのリリースに移植されるまで、以前のOSリリースに固執する必要があります)。

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