我有目录结构:
main/
__init__.py
foo/
__init__.py
names.py
names.pickle
bar/
__init__.py
my_module.py
names.py具有与names.pickle一起使用的代码,包括加载pickle数据。
但是,如果我这样做,请在my_module.py中执行:
from main.foo import names
然后我从main / bar运行my_module.py,Python向我抱怨它找不到names.pickle,大概是因为它看起来在main / bar /里面,而不是main / foo /.
建议的解决方法是什么?是暂时更改os.curdir吗?
答案 0 :(得分:2)
您应该使用names.py
的文件位置来查找names.pickle
from main.foo import names
import os
names_pickle = os.path.join(os.path.dirname(names.__file__), 'names.pickle')
每个模块都有一个__file__
属性,告诉它在文件系统中的位置。
答案 1 :(得分:0)
您还可以使用inspect
模块:
import inspect
from main.foo import names
names_pickle = os.path.join(os.path.dirname(inspect.getfile(names)), 'names.pickle')