別の tox プロジェクト (「ライブラリ」プロジェクトと呼びましょう) に依存する tox 対応プロジェクト (「メイン」プロジェクトと呼びましょう) があります。これはすべて、大規模な包括的なプロジェクトの一部であるため、1 つのリポジトリに統合されています。
通常のユーザー向けのプロジェクトの仕組み
エンドユーザーとしての通常のインストールでは、最初に「ライブラリ」をインストールし、次に「メイン」をリポジトリまたは任意のソースから直接インストールしてから実行します。
tox に関する問題
ただし、開発者としての状況は異なります。"tox" は機能するはずであり、同時に複数のバージョンを使用したい場合があるためです。
通常、大規模な包括的なリポジトリをチェックアウトすると、ファイルシステムのレイアウトは次のようになります。
overarchingproject/main/
overarchingproject/main/src/
overarchingproject/main/tox.ini
overarchingproject/main/setup.py
...
overarchingproject/library/
overarchingproject/library/src/
overarchingproject/library/tox.ini
overarchingproject/library/setup.py
...
main/ に移動して「tox」と入力すると、次のようになります。
現在の動作:「ライブラリ」に依存する「メイン」プロジェクトをビルドしようとします。これは明らかに、pip から「ライブラリ」を取得しようとする結果になります。ただし、プロジェクトはまだリリースされていないため (したがって pip ではありません)、lib が同じリポジトリにあるにもかかわらず、機能しません。
結果:うまくいきません。
回避策 1:独自のパッケージ インデックスを設定するか、ユーザーにそれを依頼することができます。ただし、単体テストを実行できるようにするためだけに、プロジェクトに貢献しているすべての人に DevPI などでそれを行うように依頼するのはあまり良い考えではないように思われるため、集中的に行う必要があります。
しかし、中心的な場所でパッケージ インデックスを提供したり、"ライブラリ" の pip パッケージを提供したりすると、自分で作成した "ライブラリ" の変更されたバージョンが関与して、"メイン" のテストを簡単に実行できなくなります。
結局、「ライブラリ」は同じリポジトリにあるため、ある時点で変更することもできます。
「メイン」プロジェクト フォルダ内に「tox」と入力しても、現在の隣接する「ライブラリ」バージョンを簡単に見つけることはできませんが、事前にパッケージ化されたオンラインのものだけが正確に直感的ではありません。
回避策 2: sitepackages=True を試し、システムに「ライブラリ」をインストールしましたが、sitepackages=True はかなりの問題を引き起こし、一般的には良い考えではないようです。
望ましい動作: tox に、そのフォルダー内の "ライブラリ" のローカル バージョンを使用してもらいたいと考えています。
そのバージョンは新しいか、ローカルで変更されている可能性があるため、これは明らかに開発者ユーザーが使用したいものです。そして、それは存在しますが、現在 pip パッケージについては言えません。
単一のプロジェクトだけでなく、サブプロジェクト (「メイン」、「ライブラリ」など) を含む包括的なリポジトリが必要なのはなぜですか?
私たちは、さまざまな目的のために多くのデーモンを備えたマルチデーモンの大規模プロジェクトを開発し、いくつかのライブラリで共有コードを使用して、大学のコース管理システムを形成します (これは、フォーラム、物を渡す可能性のあるコース管理、学生プロジェクト用の付属コード バージョン管理システムを処理します)等。)。
デーモンのサブセットのみを使用することは可能であるため、それらが別々のプロジェクトであることは理にかなっていますが、それでもほとんどの人がそれらのほとんどを持ちたいと思うほど十分に接続されているため、それらすべてが 1 つのリポジトリにあります。
ライブラリ自体も、まったく異なるプロジェクトで使用するのに適していますが、通常、最初は私たちのプロジェクトで使用されるため、リポジトリに詰め込まれています。つまり、指定された相対パスに常にあることを意味しますが、別の tox.ini と単体テストがあります。
TL;DR / まとめ
では、プロジェクトをインストールするときに pip だけでなく、tox が別の toxable プロジェクト フォルダーで特定の依存関係を探すようにするにはどうすればよいでしょうか?
もちろん、「メイン」の通常の setup.py インストール プロセスは、tox やローカル ディスクの検索をいじってはいけません。特定の相対パスを 1 つだけチェックし、それが存在しない場合は諦めます (そしてフォールバックします)。ピップまたは何でも)。
そのため、相対パスを何らかの方法で tox.ini に保存できれば最高です。
それとも、これはすべてかなり悪い考えですか?これを別の方法で解決して、ローカル リポジトリに存在する「ライブラリ」の最新のローカル開発バージョンで「メイン」プロジェクトを簡単に toxable にする必要がありますか?