如何在Google Colab中运行含多级子目录的Python项目并解决导入报错
问题原因
你之前将test_project目录本身加入了sys.path,Python导入包时会从sys.path所列路径下搜索目标包:当你要导入test_project.module1时,Python会到sys.path的路径下查找名为test_project的包目录,你将test_project本身加入路径后,Python只会在test_project目录内部搜索test_project子目录,自然匹配失败,因此只能从父目录下成功导入test_project本身,但无法导入其下的子模块。
解决方案
下面提供两种方案,其中方案2完全符合你「和pip install安装的包使用逻辑一致」的需求。
方案1:临时修正sys.path(仅对当前运行时的当前笔记本有效)
- 首先确认
test_project文件夹在Colab中的存放路径,默认上传到Colab根目录时路径为/content/test_project,你需要将test_project的父目录加入sys.path:
import sys # 替换为你实际存放test_project的父目录的绝对路径 sys.path.insert(0, '/content')
- 配置完成后即可正常导入所有模块:
from test_project.module1 import foo from test_project.utils.util1 import 对应函数
方案2:可编辑安装(和pip安装效果完全一致)
该方案会将你的项目注册到Python环境中,和普通pip安装的第三方包使用方式无差异,操作步骤如下:
- 在
test_project根目录(和module1.py、utils文件夹同级的位置)新建pyproject.toml配置文件,写入最小可用配置:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "test_project" version = "0.1.0"
如果你习惯使用setup.py,也可以替换为创建setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="test_project", version="0.1.0", packages=find_packages(), )
- 在Colab中执行安装命令:
%cd /content !pip install -e test_project
- 安装完成后,你可以在当前运行时的任意位置直接导入项目内的所有模块,不需要额外配置路径。
注:Colab运行时重置后所有临时环境配置都会失效,需要重新执行对应操作。
内容的提问来源于stack exchange,提问作者popeye
相关产品推荐
相关产品推荐

