如果您使用依賴於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,那麼您需要重命名所有模塊並修改所有的import語句在libA-dev和libA之間做了明確的分離。例如,如果libA有一個名爲moduleA.py的模塊,則將其重命名爲moduleA_dev.py。
命令
rename -n 's/^(.*)\.py/$1_dev.py/' *.py
將 「_dev」 添加到所有的* .py文件。 (使用「-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的所有引用。
爲什麼不能使用普通的源代碼管理工具來構建穩定和開發代碼的所需配置?其他人都在SVN中使用分支。並沒有編程。爲什麼你不能使用SVN分支來做到這一點? – 2009-10-19 10:21:41
看不到分支與此有關,所以我提出了一個更清晰的問題,希望它能幫助你理解我正在嘗試做的事情。 – abyx 2009-10-19 11:09:22