如何在Jupyter Notebook子目录.ipynb中导入上级目录Python文件?
在Jupyter Notebook中调用通用functions.py的几种方法
针对你的目录结构(/user/project下有通用functions.py和各模型文件夹),我整理了几个实用的方案,适配Python 3.6和Jupyter环境:
方法1:临时添加项目根目录到Python路径(简单直接)
这是最快的临时解决方案,在每个模型文件夹内的.ipynb开头加入以下代码:
import sys # 将项目根目录添加到Python的模块搜索路径中 sys.path.append('/user/project') # 现在可以直接导入functions里的内容了 from functions import your_function_name # 或者用*导入所有函数
优点:无需额外配置,上手快;缺点:每次启动Notebook都要运行这段代码,适合小项目或临时测试。
方法2:将项目目录转为Python包(规范方案)
把/user/project变成一个可导入的Python包,步骤如下:
- 在
/user/project目录下创建一个空的__init__.py文件(这是Python识别包的标志) - 在模型文件夹的Notebook中,通过绝对路径导入:
import sys # 把/user目录加入搜索路径,这样Python能找到project包 sys.path.append('/user') from project.functions import your_function_name
或者如果你已经把/user/project加到sys.path,也可以直接写:
from functions import your_function_name
方法3:安装为可编辑包(推荐长期项目)
如果你的项目需要长期维护,这个方法最规范,能让你在任何位置都能导入functions:
- 在
/user/project目录下创建setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="my_project", version="0.1", packages=find_packages(), # 如果functions.py不在子包,手动指定模块 py_modules=["functions"] )
- 在Jupyter Notebook中运行终端命令(或者直接在系统终端执行):
cd /user/project pip install -e .
-e表示可编辑模式,之后你修改functions.py的内容,所有导入的地方都会实时生效,无需重新安装。
3. 现在不管哪个模型文件夹的Notebook,都可以直接导入:
from functions import your_function_name
方法4:切换Notebook工作目录到项目根
如果不想修改sys.path,可以先把Notebook的工作目录切换到/user/project,再导入:
import os # 切换到项目根目录 os.chdir('/user/project') from functions import your_function_name
注意:切换工作目录后,Notebook中所有相对路径的文件操作都会基于/user/project,如果你的Notebook里有读取模型文件夹内文件的代码,可能需要调整路径。
小提示
- 如果你不确定当前Notebook的工作目录,可以运行
import os; print(os.getcwd())查看 - Python 3.6对上述方法都完全兼容,不用担心版本问题
内容的提问来源于stack exchange,提问作者Gaurav Bansal
相关产品推荐
相关产品推荐

