【问题标题】:Why python cannot see a file after it has been moved to a sub-directory?为什么python在移动到子目录后看不到文件?
【发布时间】:2021-03-31 14:33:15
【问题描述】:

我的目录中有一个名为 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
  • 这个系统路径附加应该可以工作。请展示问题的可重现示例。
  • 导入的顺序很重要,你是在尝试导入后添加到sys路径吗?另见python packages
  • 不,我在导入其他东西之前已经导入了 sys。

标签: python python-3.x import sys.path


【解决方案1】:

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

例如:

from funcs.mem import get_val

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

例如:

from funcs.sub.mem import get_val

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2021-07-23
    • 2010-12-28
    相关资源
    最近更新 更多