问题描述
我的目录中有一个名为 mem.py
的文件,并且来自我导入的另一个脚本:
from mem import get_val
然后我决定将 mem.py
移到 funcs
子目录中。为了使其对我从中导入的脚本可见,我已将其添加到其中:
import sys
sys.path.append('/home/myname/src/funcs/')
然而,python 不能再导入 mem
了!有趣的是,它仍然可以从位于 funcs
的其他文件中导入其他内容。
我假设 python 以某种方式记住了当前目录中的 mem.py
并继续在那里搜索但没有找到它(因为它被移到了 funcs
)。
我想在 __pycache__
子目录中找到 mem.pyc
并认为这是一个问题。所以,我已经删除了。但是,它没有帮助,我仍然无法导入表单 mem.py
。那么,我做错了什么?
我想当我更改导入顺序时问题就解决了。我的解释如下:
- 在我的第一个(非工作示例)中,第一次导入来自
mem
。 Python 记住 mem 在当前目录中,尝试在那里找到它,但没有成功并崩溃。 - 如果我更改导入顺序。 Python 看到一个新库并开始搜索它。它在 'funcs' 子目录中找到它并创建相应的 *.pyc 文件。这一步强制 Python 在
funcs
子目录中搜索其他内容(也是旧内容)。
解决方法
访问子目录中的文件可以使用'.'
例如:
from funcs.mem import get_val
这显然告诉python它必须寻找funcs并且在那里它必须寻找mem。 如果你有多个子目录你还是用同样的方法
例如:
from funcs.sub.mem import get_val
我还认为参考目录是具有 python 依赖项的目录,例如 init 目录