2016-10-18 7 views
2

ディレクトリ/home/kurt/dev/clones/ipercron-utils/testerにPythonモジュールをインポートしようとしています。このディレクトリには、tester.pyconfig.ymlというファイルが含まれています。 tester.pyは(先頭)ライン今別のディレクトリからモジュールをインポートし、そのディレクトリ内のファイルを探す方法

config = yaml.safe_load(open("config.yml")) 

を含み、別のディレクトリから、私はそうのようにそれをインポートしよう:

import sys 
sys.path.insert(0, "/home/kurt/dev/clones/ipercron-utils/tester") 
import tester 

しかし、私は次のエラーを取得:

Traceback (most recent call last): 
    File "/home/kurt/dev/clones/ipercron-compose/controller/controller_debug2.py", line 9, in <module> 
    import tester 
    File "/home/kurt/dev/clones/ipercron-utils/tester/tester.py", line 28, in <module> 
    config = yaml.safe_load(open("config.yml")) 
IOError: [Errno 2] No such file or directory: 'config.yml' 

私が理解しているように、Pythonは現在のディレクトリ(/home/kurt/dev/clones/ipercron-compose/controller)のconfig.ymlファイルを探していますが、ディレクトリ(/home/kurt/dev/clones/ipercron-utils/tester)からインポートされました。これを指定する方法はありますか?

答えて

2

__file__には、常に現在のモジュールファイルパス(ここでは/home/kurt/dev/clones/ipercron-utils/tester/tester.py)が含まれています。

dirnameを実行するだけで、あなたの設定ファイルがymlになっています。

(まだ行っていない場合import os)あなたのtester.pyモジュール内でこのようなコードを:

module_dir = os.path.dirname(__file__) 
config = yaml.safe_load(open(os.path.join(module_dir,"config.yml"))) 

サイドノート:コードはpy2exeを使って「コンパイル」されたとき__file__がメインファイルでは動作しません。その場合は、次の操作を行う必要があります。

module_dir = os.path.dirname(sys.executable) 
関連する問題