2012-11-14 61 views
2

我幾天前開始使用Python,我想我有一個非常基本的問題,我卡住了。也許我沒有做它正確的Python所以想從專家的一些建議:Python - 從不同包中的一個包中創建類的對象

我有一個的config.cfg &在一個包中的lib類測試如下:

的Myproj/lib中/的pkg1 /配置.CFG

[api_config] 
url = https://someapi.com/v1/ 
username=sumitk 

的Myproj/LIB /則pkg1/test.py

class test(object): 

    def __init__(self, **kwargs): 

     config = ConfigParser.ConfigParser() 
     config.read('config.cfg') 
     print config.get('api_config', 'username') 
      #just printing here but will be using this as a class variable 

    def some other foos().. 

現在我想在其他一些模塊在不同的包來創建測試的對象

的Myproj /例子/ useTest.py

from lib.pkg1.test import test 

def temp(a, b, c): 
    var = test() 

def main(): 
    temp("","","") 

if __name__ == '__main__': 
    main() 

運行useTest.py是給我的錯誤:

... 
print config.get('api_config', 'username') 
File "C:\Python27\lib\ConfigParser.py", line 607, in get 
    raise NoSectionError(section) 
ConfigParser.NoSectionError: No section: 'api_config' 

現在,如果我把thie useTest.py在同一封裝它運行完美的罰款:

myProj/lib/pkg1/useTest.py 
myProj/lib/pkg1/test.py 
myProj/lib/pkg1/config.cfg 

我猜Python中有一些非常基本的包訪問概念,我不知道或者有什麼我在這裏做錯了嗎?

回答

5

這裏的問題是,您有一個不同的工作目錄,具體取決於哪個模塊是您的主腳本。您可以通過添加以下行到每個腳本的頂部檢查工作目錄:

import os 
print os.getcwd() 

因爲你只需要提供'config.cfg'作爲文件名,它會試圖找到工作目錄內該文件。

要解決這個問題,給你的配置文件一個絕對路徑。

你應該能夠找出絕對路徑有以下方法,因爲你知道的config.cfg和test.py是在同一個目錄:

# inside of test.py 
import os 
config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 
          'config.cfg') 
+1

你也可以讓系統生成比特如果確保'config.read()'返回了一個真實的值,並且如果沒有,則會引發某種異常。該方法返回它成功加載的所有文件名的列表,但靜靜地忽略了它無法找到的任何文件名。 –

+0

@ F.J進行編輯時,我只是在尋找絕對路徑。謝謝它的作品!我還將添加異常檢查。謝謝sr2222。 – Sumitk

相關問題