为什么python在移动到子目录后看不到文件?

问题描述

我的目录中有一个名为 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。那么,我做错了什么?

添加

我想当我更改导入顺序时问题就解决了。我的解释如下:

  1. 在我的第一个(非工作示例)中,第一次导入来自 mem。 Python 记住 mem 在当前目录中,尝试在那里找到它,但没有成功并崩溃。
  2. 如果我更改导入顺序。 Python 看到一个新库并开始搜索它。它在 'funcs' 子目录中找到它并创建相应的 *.pyc 文件。这一步强制 Python 在 funcs 子目录中搜索其他内容(也是旧内容)。

解决方法

访问子目录中的文件可以使用'.'

例如:

from funcs.mem import get_val

这显然告诉python它必须寻找funcs并且在那里它必须寻找mem。 如果你有多个子目录你还是用同样的方法

例如:

from funcs.sub.mem import get_val

我还认为参考目录是具有 python 依赖项的目录,例如 init 目录

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...