微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么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 目录

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?