如何从其他目录导入模块并让它在该目录中查找文件

时间:2016-10-18 14:23:35

标签: python

我试图在目录/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正在寻找当前目录(config.yml)中的/home/kurt/dev/clones/ipercron-compose/controller文件,而我希望它查看模块导入的目录(/home/kurt/dev/clones/ipercron-utils/tester )。有没有办法指定这个?

1 个答案:

答案 0 :(得分:2)

__file__始终包含当前模块文件路径(此处为/home/kurt/dev/clones/ipercron-utils/tester/tester.py)。

只需对其执行dirname =&gt;您有包含yml配置文件的路径。

tester.py模块中对此进行编码(import os,如果尚未完成):

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

旁注:当代码被编译时,__file__不会对主文件起作用。使用py2exe。在这种情况下,你必须这样做:

module_dir = os.path.dirname(sys.executable)