7

私は、Python (特に Django) ベースの Web サイトとそれに付随するバックエンド ツールのベータ版を立ち上げようとしているチームのメンバーです。チーム自体の規模は過去数週間で 2 人から 4 人に倍増しており、少なくとも今後 2 か月間は成長が続くと予想しています。私たちを悩ませ始めた問題の 1 つは、開発環境を構成し、すべての適切な卵をインストールするなどの点で、全員を最新の状態に保つことです。

このプロセスを簡素化し、エラーが発生しにくくする方法を探しています。zc.buildout と virtualenv はどちらも、この問題に対処するための優れたツールのように見えますが、どちらも主に python 固有の問題に集中しているようです。他の言語 (具体的には Java と Ruby) のいくつかの小さなサブプロジェクトと、ネイティブにコンパイルする必要がある多数の Python 拡張機能 (lxml、MySQL ドライバーなど) があります。実際、セグメンテーション違反、malloc エラー、およびあらゆる種類の同様の問題を回避するために、これらの拡張機能のいくつかを適切なバージョンの共有ライブラリに対してコンパイルすることが、私たちの最大の悩みの 1 つです。4 人のうち、4 つの異なる開発環境 (ppc の 1 人のヒョウ、intel の 1 人のヒョウ、1 つの ubuntu と 1 つの Windows) があることは役に立ちません。

最終的に理想的なのは、dos/unix プロンプトから、おおよそ次のように動作するものです。

$ git clone [リポジトリの URL] ... $ python setup-env.py ...

次に、zc.buildout/virtualenv が行うこと (python インタープリターをコピー/シンボリック リンクし、egg をインストールするためのクリーンなスペースを提供する) を行い、ネイティブ共有ライブラリの依存関係のインストールを含む、必要なすべての Egg をインストールし、ruby プロジェクト、Java プロジェクトなどをインストールします。 .

明らかに、これは、開発環境を立ち上げたり、ステージング/運用サーバーにデプロイしたりするのに役立ちます。

理想的には、これを実現するツールを Python で記述/拡張できるようにしたいと考えています。これは私たちのチームの共通言語であるため (そして今後もそうなるでしょう)、他の言語でのソリューションも受け入れます。

それで、私の質問は次のとおりです。より大きな/より広いインストールベースを処理するために、これらのソリューションのいずれかを使用して共有できるより良い代替案や経験について誰か提案はありますか?

4

6 に答える 6

4

Setuptools は、あなたが思っているよりも多くの機能を備えている可能性があります。たとえば、MacOS X で正しく動作するために lxml のカスタム バージョンが必要な場合は、setup.py 内の適切な卵への URL を配置できます。必要に応じて、開発者の環境内に setuptools をダウンロードしてインストールします。また、リビジョン管理から依存関係の特定のバージョンをダウンロードしてインストールするように指示することもできます。

そうは言っても、私はスクリプトで生成された仮想環境を使用することに傾倒しています。依存するパッケージをインストールするキックスタート ファイルを作成し、それに対して仮想マシン (または実稼働ハードウェア!) を起動し、他の管理 (ユーザーの追加、サービスのセットアップ [データベースの場所] ?] など)。これは、本番環境に複数のマシンが含まれている場合に特に便利です。便利な小さなサンドボックス サブネット内で複数の VM の生成をスクリプト化するだけです (これには libvirt+kvm を使用します。開発者が作業しているすべてのプラットフォームで kvm を使用できるわけではありません)。または、私のように、少数の強力な VM ホストを複数の開発者が共有することもできます)。

これにより、N 個のプラットフォームをサポートするという頭痛の種から解放されます。つまり、サポートする仮想プラットフォームは 1 つしかありません。セットアップに使用されるキックスタート ファイルと puppet コードによって定義されるデプロイ プロセスが、ソース管理されて実行されることを意味します。他のすべてと同じように、QA およびレビュー プロセスを通じて。

于 2008-10-09T00:41:06.493 に答える
3

私は常にdevelop.pyプロジェクトの最上位にファイルを作成し、インストールしたい PyPIpackagesのすべてのファイルを含むディレクトリも用意し、そのファイルからすぐに実行できる解凍済みのコピーも含めます。これらはすべてバージョン管理に入ります。すべての開発者は単にトランクをチェックアウトして実行するだけで、しばらくすると、他の開発者が使用しているバージョンとまったく同じバージョンのすべての依存関係を含む仮想環境を使用できるようになります。また、PyPI がダウンしていても機能します。これは、サービスの歴史のこの時点で非常に役立ちます。.tar.gzvirtualenvdevelop.py

于 2010-10-30T22:31:38.570 に答える
0

質問を投稿して以来、この問題の調査を続けてきました。Minitage と Puppet など、私が概説したニーズのいくつかに対処する試みがいくつかあるようです。たとえば、MinitagePuppetは異なるアプローチをとりますが、どちらも私が望むものを達成する可能性があります。より良いオプションがないので、これらのいずれかを作成するか、zc.buildout をカスタマイズして広範囲に使用するだけでニーズに対応できるようにしますが、それでも他にもっと良いオプションがあるはずだと感じています。

于 2008-10-02T05:12:05.313 に答える
0

実行している実稼働 OS と、事前に構築されたすべてのソフトウェア依存関係を使用して、仮想マシン アプライアンスを作成することを検討することもできます。コードは、リモートで、または共有フォルダーを使用して編集できます。かなり複雑な開発環境を持っていた過去の人生で、それは私にとってかなりうまくいきました.

于 2008-10-07T03:13:09.497 に答える
0

基本的に、クロスプラットフォームのソフトウェア/パッケージ インストーラー(apt-get/yum/etc の行) を探しています。そのようなものが存在するかどうかわかりませんか?

別の方法として、Fink や Mac OS X の DarwinPorts などの OS 固有のパッケージ管理システムを介してインストールする必要があるパッケージのリストを指定し、社内コードのビルド環境をセットアップするスクリプトを用意することでしょうか?

于 2008-10-02T04:21:44.090 に答える
0

Puppet は (簡単に) Win32 の世界もサポートしません。「開発セットアップ」ツールだけでなく、展開メカニズムを探している場合は、オープンソースのクロスプラットフォーム ソリューションを備えたControlTier ( http://open.controltier.com/ ) を検討することを検討してください。

その先には、BladeLogic や OpsWare などの「エンタープライズ」ソフトウェアがあり、通常、提供される機能に対して法外な価格が設定されています (明らかに私の意見です)。

多くの人が Puppet と Capistrano の組み合わせを (Rails 以外の開発者でさえも) デプロイ自動化ツールに積極的に使用して、かなりの効果を上げています。繰り返しになりますが、欠点は、ある程度均一な環境が期待されていることです。

于 2008-10-07T20:06:39.810 に答える