2014-06-24 52 views
0

我有這樣的項目結構:子模塊內部的Python更改路徑?

- main.py 
- app_a/ 
    - __init__.py 
    - app.py 
    - stubs/ 
    - app.py 
- tests/ 
    - test_app_a.py 

main.py,有:

from app_a.app import foo

能正常工作。 但是,在測試環境中運行(可以通過env變量進行檢查)時,我需要main.py從存根模塊(位於app_a/stubs/app.py)而不是真實的app_a/app.py導入。

請注意,我本身不能更改main.py,我可以在運行之前更改環境。

我該如何執行此操作?謝謝。

回答

0

爲什麼不寫在main.py

if env: 
    from app_a.app import foo 
else: 
    from app_a.stubs.app import foo 
+0

我無法更改'main.py' – wong2

+0

如果您根本無法更改main.py,我認爲您可以在app_a/app.py中添加if-else about foo,以便main.py將導入根據env不同的foo。 – YCFlame

0

如下如果你可以移動app_atests文件夾複製到不同的位置(不是腳本執行目錄和Python的搜索路徑等),你可以有相同的代碼和進口使用PYTHONPATH的不同模塊。現在,如果要運行代碼,請將app_a路徑設置爲PYTHONPATH,並且如果您正在運行測試,請將app_a\stubs設置爲PYTHONPATH。在代碼中,你可以從`app import foo'中獲取兩者。

其他方法是當您導入app_a.app時,stubs.app已經是它的一部分;在代碼中處理這個。