2009-11-10 15 views
6

Pinax開発中に発生する1つの問題は、開発版の外部アプリを扱うことです。私は、バージョン管理システムを導入することを伴わないソリューションを考え出しています。なぜなら私のシステムにすべてのバージョンコントロールシステムをインストールする必要はなく、環境作成時に発生する可能性のある問題に対処する必要はないからです。SCMに依存せずにPythonパッケージの開発版を扱うにはどうすればよいですか?

は(Pinaxがどのように動作するかを知ることは理解に有益になります)このような状況を取る:

我々はPinaxの新バージョンで開発を始めています。以前のバージョンには明示的なバージョンが設定されたpip要件ファイルがあります。解決したい外部アプリにバグがあります。 Pinaxでこのバグ修正を取得するには、現在のプロセスでは、アプリのコントロールがあると仮定して、アプリのマイナーリリースを行うだけです。私たちが制御権を持っていないアプリは、アプリ作者のリリースサイクルを処理したり、リリースを強制したりします;-)私はバグ修正のためのマイナーリリースを常に好むとは限らない場合もありますアプリの新機能も開発しています。もちろん、古いバージョンを分岐することは私たちがやっていることであり、必要に応じてバックポートをやります。

私はこれに関するいくつかの考えを聞きたいです。

+0

「私は常にバグ修正のためのマイナーリリースを行うことがあまりにも好きではないよ...」 「もちろん、古いバージョンの分岐...我々は何をすべきかさ」 だけ明確にするために、あなたが話していますアプリまたはPinax自体(またはその両方) –

+0

私はそのアプリを参照していました。私たちは、devバージョンの要件で新しいマイナーリリースをターゲットにし、以前のリリースのPinaxをマイナーリリースしたい場合は、要件をバックポートします。 –

答えて

3

私が尋ねる前に検討していた解決策は、Pinax PyPIを設定して開発リリースを行うことでした。私たちはchishopのインスタンスを立ち上げることができました。私たちはすでにピップのリンクを使って、自分自身を解放しなければならなかったパッケージについて、pypi.pinaxproject.comを指しています。

+0

-1がどこから来たのかわからない、誰かが説明する気に?私にとっては、これは潜在的に最良の選択肢のように思える。 –

3

"== dev"バージョン指定子を使用してこれを処理できますか? PyPIのディストリビューションのページに現在の開発バージョンの.tgzへのリンクが含まれている場合(githubとbitbucketの両方が自動的に提供されるなど)、 "#egg = project_name-dev"をリンクに追加すると、easy_installとpipの両方が。== devが要求された場合は.tgz。

これは、「最近のヒント/ヘッド」よりも具体的なものにピンで固定することはできませんが、十分な場合が多い多くのケースでは、

1

ほとんどのオープンソースディストリビューター(Debian、Ubuntu's、MacPortsなど)は、ある種のパッチ管理メカニズムを使用しています。つまり、リリースされた各パッケージの基本ソースコードをtarボールとしてインポートするか、SCMスナップショットとしてインポートします。次に、quiltまたはMercurial's Queuesのようなパッチマネージャを使用して、必要な変更を管理します。その後、パッチを適用した外部パッケージを一貫した形式でまとめます。または、ベースパッケージへのURLと個々のパッチへのURLを用意し、インストール中にそれらを適用させます。それは基本的にはMacPortsのことです。

EDIT:これをさらに進めるには、すべての外部パッケージでパッチのセットをバージョン管理し、として利用可能にします。これは、Mercurial Queuesで行うのが簡単です。次に、1つのSCMシステムを使用して、パッチを上記のようにローカルで適用するか、または開発者がベースリリースパッケージのコピーに適用して適用できるようにして、1セットのパッチを公開するだけで問題を単純化しました。

0

編集:私はあなたの質問を正しく読んでいるとは確信していないので、以下の質問があなたの質問に直接答えないかもしれません。

私が考えているが、テストしていないものは、ピップのフリーズバンドル機能を使用しています。おそらくこれを使用して、バンドルをピナックスと一緒に配布することはできますか?私の唯一の懸念は、異なるOSがどのように扱われるかということです。たとえば、私はWindowsでpipを使用したことがないので、バンドルがどのように相互作用するかはわかりません。

私が試したいと思う完全なアイデアは、バンドルの管理を制御するpaverスクリプトを作成して、ユーザーが新しいバージョンに簡単にアップグレードできるようにすることです。しかし、これは足場を少し必要とするでしょう。

もう1つのオプションは、一貫性のないvcsで制御できないアプリケーションのミラーを保持しておき、ミラー化されたバージョンを配布することです。これにより、「誰もが」さまざまなプログラムをインストールする必要がなくなります。

それ以外の唯一の現実的な解決策は、皆さんがやっていることだと思います。私が見つけられた手間のかからない方法はありません。

+0

これは、Pinaxのリリースプロセスに関連します。私たちは今そこにかなり確立されたシステムを持っています。しかし、私たちは、ピップのバンドルをリリース用にしようと考えました。それはまだテーブルの上にありますが、私たちはそのように動くように決心していません。特にピップバンドルは非常に実験的な特徴です。 –

+0

質問を読み返した後、私は直接それに答えていないのを見た。 –

関連する問題