导入我自己的模块时出现“ImportError: No module named...”

Posted

技术标签:

【中文标题】导入我自己的模块时出现“ImportError: No module named...”【英文标题】:"ImportError: No module named..." when importing my own module 【发布时间】:2016-06-04 00:13:27 【问题描述】:

我正在尝试导入一个模块,但我不断收到 ImportError。

在 Portfoliostatus.py 文件中,我有以下代码从 share_data.py 模块导入 share_data 类 from Shares.share_data import share_data

我收到以下错误:

File "/home/lucasamos/FYP/Shares/Communication/PortfolioStatus.py", line 3, in <module>
from Shares.share_data import share_data
ImportError: No module named Shares.share_data

为了让事情更混乱,这在我的本地机器上运行良好,但我在 PythonAnywhere 上托管,这就是我得到错误的地方

我的文件层次如下图所示

提前致谢!

【问题讨论】:

运行配置中的工作目录是什么?这将被添加到sys.path。如果您将其设为项目目录(将其留空)Shares 应该是可导入的。 查看detailed guide to debugging sys.path and import issues on PythonAnywhere 【参考方案1】:

你应该试试这个:

import sys
sys.path.append("../Shares/templates")
import share_data

它将您的模板文件夹添加到 python 正在检查模块的路径列表中。

【讨论】:

share_data.py 文件不在模板文件夹中,它在 Shares 文件夹中。我刚刚在路径中添加了Shares,但这并没有奏效:( 我的错,我想念关闭的文件夹。尝试添加完整路径而不是相对路径,例如“/home/YourName/PycharmProjects/FYP/Shares” 您需要添加包含目录,而不是包本身。 @PeterWood 你能详细说明一下吗?恐怕我有点像蟒蛇n00b【参考方案2】:

好的,所以我终于解决了。 正如一些答案所示,我需要将根文件夹添加到系统路径。

最后这就是我所做的:

import sys
sys.path.append("/home/lucasamos/FYP")

【讨论】:

万岁!对于其他有类似问题的人,文档中有 detailed guide to sys.path and import errors on pythonanywhere【参考方案3】:

manage.py 文件的一层上添加空的__init__.py

__init__.py 文件的这种包含向 Python 解释器表明该目录应被视为 Python 包。

【讨论】:

@MattO'Brien 感谢您的评论,当然我会为该答案添加一些解释。祝你有美好的一天)【参考方案4】:

这可能是因为您的 Shares 目录不在您的 PYTHONPATH 中。

请参阅这篇关于使用 PYTHONPATH 的文章: https://users-cs.au.dk/chili/PBI/pythonpath.html

摘录:

但是,您通常需要导入与主程序不在同一目录中的模块。继续上面的例子,假设你正在编写一个位于 ~/PBI/ 的程序,它需要包含 mymodule.py。

为了让 Python 解释器找到您的模块,您需要告诉它在哪里查找。您可以通过设置环境变量 PYTHONPATH 来做到这一点。根据您使用的 shell 程序(例如 xterm),这可以通过以下两种方式之一完成。

重击:

导出 PYTHONPATH=$PYTHONPATH:/users/[您的用户名]/PBI/Modules/

【讨论】:

添加外部链接时(将来可能会损坏),习惯上也将相关部分编辑到您的答案中。

以上是关于导入我自己的模块时出现“ImportError: No module named...”的主要内容,如果未能解决你的问题,请参考以下文章

导入 micropython 中存在的模块时出现 ImportError

安装报纸时出现 ImportError

python导入模块ImportError

导入 PySide2 时出现 ImportError

导入 jwt ImportError:没有名为 jwt 的模块

使用 Pmw 时出现“ImportError:没有名为 tkinter 的模块”