导入我自己的模块时出现“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