我试图在目录/home/kurt/dev/clones/ipercron-utils/tester
中导入Python模块。该目录包含tester.py
和config.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
)。有没有办法指定这个?
答案 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)