libA(安定版)に依存するlibTを使用してlibA-devを「テスト」する場合、実稼働環境で動作するため、実際にはlibA-devをテストしていません。libA-devを実際にテストする唯一の方法は、思い切ってlibTをlibA-devに依存させることです。これがユニットテストに失敗した場合、それは良いことです-それはあなたに何を修正する必要があるかを示しています。
ユニットテストがない場合は、今がそれらの作成を開始するときです(最初に安定したlibAとlibTを使用してください!)。
「バージョン管理システム」(bzr、hg、svn、gitなど)を使用することをお勧めします。次に、プロジェクトのブランチを「stable」と「devA」にすることができます。
ブランチdevAで作業するには、最初に実行します
export PYTHONPATH=/path/to/devA
PYTHONPATH環境変数が他のブランチを除外していることを確認することで、Pythonが必要なモジュールだけを使用していることが保証されます。
dev-> stableからコードをマージするときが来ると、バージョン管理ソフトウェアはそれを行う簡単な方法も提供します。
バージョン管理により、より大胆にすることもできます。大きな変更を試みることはそれほど怖いことではありません。うまくいかない場合は、元に戻すのはとても簡単です。それとPYTHONPATHトリックの間で、いつでも既知の機能するコードに戻ることができます。
上記が単にうまくいかないと感じ、libT-which-depends-on-libAを使用してlibA-devをテストする必要がある場合は、すべてのモジュールの名前を変更し、すべてのインポートステートメントを変更する必要がありますlibA-devとlibAを明確に分離します。たとえば、libAにmoduleA.pyというモジュールがある場合は、その名前をmoduleA_dev.pyに変更します。
コマンド
rename -n 's/^(.*)\.py/$1_dev.py/' *.py
すべての*.pyファイルに「_dev」を追加します。(「-n」フラグを使用すると、名前変更コマンドは意図された名前変更のみを表示します。実際に実行するには、「-n」を削除してください。)
名前の変更を元に戻すには、
rename -n 's/^(.*)_dev\.py/$1.py/' *.py
次に、コード内でmoduleAへのすべての参照をmoduleA_devに変更する必要があります。コマンド
find /path/to/LibA-dev/ -type f -name '*.py' -exec sed -i 's/moduleA/moduleA_dev/g' {} \;
LibA-dev内のすべての*.pyファイルを変更し、「moduleA」->「moduleA_dev」を変更します。
このコマンドには注意してください。moduleABという変数がある場合、それはmoduleA_devBに名前が変更されますが、本当に必要なのはmoduleAB_devである可能性があるため、危険です。
この変更を元に戻すには(上記の注意が必要です)、
find /path/to/LibA-dev/ -type f -name '*.py' -exec sed -i 's/moduleA_dev/moduleA/g' {} \;
名前空間を分離すると、循環依存関係が解消されます。libA-devに問題がなければ、moduleA_dev.py-> moduleA.pyを変更し、コード内のmoduleA_dev->moduleAへのすべての参照を変更できます。