実用的な場合は、バージョン管理下でのビルドに必要なツールが必要です。理想的なのは、最初にインストールする必要のある最小限のツールセットを使用して、任意のマシンで新しいチェックアウトを実行することです。
Pythonをバージョン管理下に置くことは実用的ですか?
Pythonパッケージはどうですか?Docutilsに依存しているため、インストールせずにSphinxを使用しようとする私の素朴な試みは失敗します。インストールせずに使用する方法はありますか?
実用的な場合は、バージョン管理下でのビルドに必要なツールが必要です。理想的なのは、最初にインストールする必要のある最小限のツールセットを使用して、任意のマシンで新しいチェックアウトを実行することです。
Pythonをバージョン管理下に置くことは実用的ですか?
Pythonパッケージはどうですか?Docutilsに依存しているため、インストールせずにSphinxを使用しようとする私の素朴な試みは失敗します。インストールせずに使用する方法はありますか?
これらのニーズについては、virtualenv と buildout を参照してください。
virtualenv
プロジェクトを実行している Python を、そのバージョンの Python でインストールされた他のパッケージから分離できます。したがって、プロジェクトで Python xy が必要な場合、唯一の前提条件は、そのバージョンの Python のコピーがシステムで利用できることを確認することです。内にインストールするパッケージは、そのvirtualenv
外にインストールされたパッケージから完全に分離されます。
buildout
sphinx
パッケージの依存関係を指定できるため、ドキュメントを作成する必要がある場合は、これをbuildout.cfg
ファイルに含めるだけです。
parts =
sphinx
[sphinx]
recipe = collective.recipe.sphinxbuilder
実行buildout
すると、 がインストールさcollective.recipe.sphinxbuilder
れ、ダウンロードしてインストールdocutils
さsphinx
れ、virtualenv
ドキュメントがビルドされます。
およびファイルを含むフォルダーbuildout.cfg
の最初のチェックアウトからシステムを実行するために必要なすべての依存関係を含めることができます。これにより、開発または最終展開のためのシステムのセットアップが非常に簡単になります。buildout.cfg
bootstrap.py
いいえ、コンパイラと同じように、python インタープリタはシステム全体にインストールする必要があります。同じことが sphinx や docutils などのツールにも当てはまります (ディストリビューションのパッケージ マネージャーを介して sphinx をインストールするときにインストールされる可能性が最も高い)。
同じことが、ほとんどの python パッケージ、特にアプリケーション自体で使用され、PyPi 経由で利用できるものに当てはまります。
Python は、多くのアプリケーションと同様に、プロジェクトがチェックアウトされている場所では実行されません。パスに追加し、セットアップについて少し知る必要があります。これが、プラットフォーム (Mac および Linux) の一部であるか、本格的なインストーラー (Windows) が必要な理由です。
この点を考慮すると、おそらく Python 自体をリポジトリに含めない方がよいでしょう。プラットフォームに適したバイナリ インストーラーを選択し、インストーラーを実行する必要があります。そして、バージョン リポジトリでバージョンを更新する場合は、ターゲット システムをアップグレードする必要があります。このすべての後、ほとんどの場合、一貫したシステムを使用できなくなります。そのため、そもそも Python をバージョン管理するという点が台無しになります。
適切なバージョン管理と依存関係管理には、特定のバージョンのツールを維持する必要があります。Setuptools には、これを簡単にするeasy_installが含まれています。
easy_install "pytest==2.2.4"
特定のバージョンに注意してください - 特定のバージョンについてあまり心配していない場合、これは省略できます。または、最小値を指定できます。
easy_install "pytest>2.2"
(注: pip など、同様に機能する他のツールがあります)
デフォルトでは、Pypi から読み込みます。これにより、すべての履歴バージョンがリポジトリに保持されます。特定のバージョンがなくなることを本当に心配していない限り、これで問題ありません。数百万ドルまたは命がかかっている場合は、ツールをローカル リポジトリにチェックインし、easy_install (または同様のもの) を使用してインストールします。
virtualenvプロジェクトを使用して Python 環境を仮想化することを強くお勧めします。そうすることで、easy_install がライブラリとツールをインストールするサンドボックスを作成できるため、システムに誤ってインストールされた他のツールから隔離されます。Virtualenv は、Python の特定のバージョンを管理することもできます。
別の考え: ビルド/テスト目的で特定の環境を複製することが重要な場合は、VirtualBox、VMWare などのクラウド/OS 仮想化アプローチの使用を検討してください。多くの異なるマシンで文字通り同一の OS イメージを実行できます。
通常、バージョン管理にはプロジェクトを含める必要があります。依存関係をそこに含めることは、ほとんどの場合、悪い考えです。ただし、それらに対して常に静的リンクを行うという明示的なポリシー決定を行っている場合を除きます (解釈されたコードの場合、依存関係をソース ツリーに保持する必要があります)。あなたが望むのは、起動時の依存性インジェクターであるZero installのようです。基本的に、静的リンクの利点を得ることができます (関連するすべてのパッケージマネージャーリポジトリにアクセスできない/したくない場合、ユーザーは依存関係をインストールする必要はありません) 欠点 (ユーザーは最終的に複数の、潜在的に同期していない、一般的な依存関係のバージョンが存在します)。