Python跨PyCharm、Colab环境如何解决import导致的ModuleNotFoundError
解决方案
核心逻辑是将项目根目录a永久加入Python的模块搜索路径,全程使用绝对导入即可适配所有运行场景,同时解决PyCharm标错问题。
第一步:统一用绝对导入写法
把script1.py里的导入改成固定的绝对导入格式,不需要使用相对导入:
# script1.py 内的导入写法 from b.c import script2 from b.d import script3
第二步:配置模块搜索路径(适配所有场景)
Python导入模块时只会搜索sys.path列表里的路径,所有导入报错本质都是a文件夹不在sys.path中,按不同场景配置即可:
场景1:本地PyCharm环境
- 右键点击项目根目录
a,选择「Mark Directory as → Sources Root」,PyCharm会自动把a加入运行时的sys.path,既不会出现语法标错,运行时也不会抛出导入异常。 - 如果直接通过命令行运行主脚本,可以在主脚本所有导入语句的最前面添加以下代码:
import sys from pathlib import Path # 自动获取a文件夹的绝对路径,不受主脚本存放位置影响 if Path(__file__).parent.name == "a": PROJECT_ROOT = Path(__file__).parent.resolve() else: PROJECT_ROOT = Path(__file__).parent.parent.resolve() sys.path.append(str(PROJECT_ROOT))
场景2:Google Colab环境
克隆完GitHub仓库后,在notebook最开头的代码块中添加以下代码,把Colab环境里的a文件夹路径加入搜索路径即可:
import sys # 路径替换为你实际克隆后a文件夹的绝对路径即可,示例为/content/xxx_repo/a sys.path.append("/content/你的仓库名称/a")
关于__init__.py的补充说明
Python 3.3+虽然支持隐式命名空间包,不需要__init__.py也能识别包结构,但手动给b、c、d三个文件夹都添加空的__init__.py,可以让IDE、老版本Python更准确地识别包结构,避免不必要的错误提示,配置成本极低,建议补充添加。
内容的提问来源于stack exchange,提问作者SagiZiv
相关产品推荐
相关产品推荐

