Jupyter Notebook从父目录导入时提示No module named 'src'的解决方法
解决Jupyter Notebook无法导入src模块的问题
问题根源
你的some_notebook.ipynb放在my_project/notebook目录下,而src模块在项目根目录my_project里。Python默认只会在当前工作目录(也就是notebook)和系统默认路径里找模块,所以找不到src。
正确的sys.path.append路径
你要加的不是../src,而是项目根目录my_project的路径,可以用相对路径../,或者直接写绝对路径。
在Notebook最开头加这段代码:
import sys sys.path.append('../') # 也可以写绝对路径,比如 sys.path.append('/Users/xxx/my_project')
之后再执行from src.preprocess import some_processing就没问题了。
为什么../src不行?因为Python要识别src作为一个模块,必须找到包含src的父目录。如果加的是../src,Python会去../src里找名为src的模块,自然找不到。
更稳定的解决方案
临时改sys.path每次开Notebook都要写,推荐两种更省心的方式:
- 设置PYTHONPATH环境变量:启动Notebook前,在终端里先执行:
这样启动的Notebook会自动把项目根目录加入模块搜索路径,不用每次改sys.path。export PYTHONPATH="/你的项目绝对路径/my_project:$PYTHONPATH" jupyter notebook - 安装为可编辑包:在
my_project根目录下创建pyproject.toml(内容可以参考下方示例),然后执行:
这会把整个项目安装成可编辑的Python包,不管你在什么位置运行代码,都能直接导入pip install -e .src模块,这也是AlphaFold这类项目常用的规范做法。
示例pyproject.toml内容:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "my_project" version = "0.1.0"
内容的提问来源于stack exchange,提问作者PeeteKeesel
相关产品推荐
相关产品推荐

