2013-09-29 46 views
0

我有以下目錄結構:進口同級目錄(再次)

src/ 
    main/ 
     somecode/ 
      A.py 
      B.py 
      __init__.py 
     __init__.py 
    test/ 
     somecode/ 
      testA.py 
      testB.py 
      __init__.py 
     __init__.py 
    __init__.py 

我是能夠成功地添加以下的測試模塊:

import sys 
sys.path.insert(0, "absolute path to src") 

這讓我跑nosetests來自src文件夾。但問題是當其他人使用我的代碼時,這是行不通的,因爲他們的絕對路徑不一樣。

於是我嘗試:

import sys, os 
sys.path.append(os.path.abspath('../../../main/somecode') 
from main.somecode import A 

其從工作的src /測試/ somecode很大,但因爲相對路徑不從那裏工作,我不能運行從src文件夾nosetests。

我也嘗試做... main.somecode import A,但它不喜歡,即使它們都是python包。

那麼我該怎麼做? This看起來像是一個潛在的答案,但他沒有解釋添加代碼的位置。

回答

1

而是使用相對路徑(「../../../main/somecode」),你 可以做相同的,但使用__file__全局變量:

tests_dir = os.path.dirname(__file__) 
sys.path.append(os.path.join(tests_dir, "..", "..", "..", "main", "somecode")) 

我會放即在「test/somecode」下的__init__.py文件中,而不是 爲每個測試模塊文件添加它。

+0

謝謝,這工作完美 – postelrich