2

私は数日前に Python を使い始めました。多分私はPythonで正しくやっていないので、専門家からのアドバイスが欲しかった:

次のように、1 つのパッケージ lib に config.cfg とクラス テストがあります。

myProj/lib/pkg1/config.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/example/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'

useTest.py を同じパッケージに配置すると、完全に正常に動作します。

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

Python には、私が認識していない非常に基本的なパッケージ アクセスの概念があると思いますか、それともここで間違っていることがありますか?

4

1 に答える 1

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')
于 2012-11-14T19:55:34.070 に答える