IOError: [Errno 2] 找不到文件或目录 / 在包中
下面是我在 pkg/settings 文件夹下的 __init__.py
文件。
import yaml
import os
def Keypairs():
print os.path.dirname(os.path.realpath(__file__))
with open('keypairs.yaml') as f:
return yaml.load(f)
我运行这个包的命令是:python -m pkg.test.first
,这个命令里面有一个相对导入:
from ..settings import Keypairs
print Keypairs()
但是我遇到了这个问题:
IOError: [Errno 2] No such file or directory: 'keypairs.yaml'
尽管文件结构是这样的:
pkg/
__init__.py
settings/
__init__.py
keypairs.yaml
test/
__init__.py
first.py
我到底在目录上搞错了什么呢?
如果我直接把 __init__.py
(在 settings 文件夹里)当作脚本运行,它能找到这个文件。
2 个回答
1
看起来因为我把这个文件当作一个包来运行,所以它把包所在的文件夹当作父目录。
所以你需要传递
basepath = os.path.dirname(__file__)
keypairs = os.path.abspath(os.path.join(basepath, "keypairs.yaml"))
with open(keypairs,'r') as f:
return yaml.load(f)
或者如果你想用绝对路径的话:
with open("pkg/settings/keypairs.yaml",'r') as f:
还有一种最干净的方式,感谢@yorodm的帮助
with open(os.path.join(os.path.dirname(__file__),'keypairs.yaml')) as f:
return yaml.load(f)
0
编辑过
你打开文件的目录不对,导入一个模块并不会改变你的工作目录。你应该这样做:
import yaml
import os
def Keypairs():
print os.path.dirname(os.path.realpath(__file__))
with open(os.path.join(os.path.dirpath(__file__),'keypairs.yaml')) as f:
return yaml.load(f)