Jupyter导入模块提示No module named 'project_code'该如何解决?
这个错误是Python的模块搜索机制导致的:Python导入包时会遍历sys.path列表中存储的所有路径,查找匹配的包/模块,出现No module name 'project_code'说明project_code文件夹所在的父目录不在sys.path的搜索范围内。
你之前直接from source import load_image能正常运行,大概率是因为Jupyter当前的工作目录刚好就是project_code文件夹本身,Python直接在工作目录下找到了source.py文件。
下面是可选择的修复方案:
方案1:Jupyter单次运行临时修复
如果你只是临时需要运行这段代码,在导包前手动把project_code的父目录加入搜索路径即可。
如果你的ipynb笔记本文件和project_code文件夹在同一个目录下,直接用以下代码:import os import sys sys.path.append(os.path.abspath(".")) from project_code.source import load_image如果不在同一个目录,把
os.path.abspath(".")替换为project_code父目录的绝对路径即可,比如"C:/my_work/python_projects/"。方案2:补全包标识文件
检查project_code文件夹下是否存在空的__init__.py文件,如果没有就新建一个。Python 3.3+虽然支持无__init__.py的命名空间包,但部分老旧环境或者自定义导入逻辑下还是需要这个文件识别文件夹为可导入的Python包。方案3:永久生效修复
把project_code的父目录路径添加到系统的PYTHONPATH环境变量中,添加完成后重启Jupyter内核,之后所有Python环境都可以直接导入project_code下的模块,不需要每次运行都修改sys.path。
注意:如果要使用
from project_code.source import load_image的导入写法,不要把Jupyter的工作目录切换到project_code内部,保持工作目录在project_code的父目录层级即可。
内容的提问来源于stack exchange,提问作者Black Beard 53

