以下是我的 init .py,它位于pkg / settings
下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
(在设置中)作为脚本运行,则会找到该文件。
答案 0 :(得分: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)
答案 1 :(得分: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)