1

我有目录结构:

main/
__init__.py
     foo/
         __init__.py
         names.py
         names.pickle
     bar/
         __init__.py
         my_module.py

names.py 具有与 names.pickle 一起使用的代码,包括加载腌制数据。

但是,如果我这样做,在 my_module.py 中:

from main.foo import names

然后我从 main/bar 运行 my_module.py,Python 向我抱怨它找不到 names.pickle,大概是因为它在 main/bar/ 中查找,而不是 main/foo/。

解决此问题的推荐方法是什么?是临时改os.curdir吗?

4

2 回答 2

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__属性,告诉它它在文件系统上的位置。

于 2013-08-24T03:31:10.263 回答
0

您还可以使用该inspect模块:

import inspect
from main.foo import names

names_pickle = os.path.join(os.path.dirname(inspect.getfile(names)), 'names.pickle')
于 2013-08-24T03:42:00.693 回答