You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过相对导入从父目录下数字开头的子目录导入Python模块

问题解决方法

错误原因

  • 语法报错的核心原因是Python要求可通过点式导入语法直接引用的包名必须符合标识符命名规范:不能以数字开头,仅可包含字母、数字、下划线。你使用的01_sub-dir目录名以数字开头,不符合规范,直接写在from ... import语句中会被Python解析为非法的数字字面量,触发报错。
  • 你写的导入语句中目录名和实际不符:实际目录名为01_sub-dir,你的语句中写为01_subdir,缺少横杠,即使命名规范符合也会找不到模块。

解决方案

无需修改现有目录结构,使用importlib动态导入即可实现需求,示例代码如下:

import importlib
# 按相对路径导入目标模块,__package__会自动补全当前包的上下文
file01_module = importlib.import_module("..01_sub-dir.file01", __package__)
# 从模块中提取需要的my_class类
my_class = getattr(file01_module, "my_class")

注意事项

  • 要使用相对导入,不能直接将file02.py作为入口脚本运行(比如直接执行python file02.py),否则Python会将该文件的__name__设置为__main__,丢失包上下文导致相对导入失效,需要以模块形式运行,示例命令如下:
# 在parent-dir的上级目录下执行
python -m parent-dir.02_sub-dir.file02
  • 所有涉及的包目录(parent-dir、01_sub-dir、02_sub-dir)下需要存在__init__.py文件(可为空文件),Python才会将目录识别为可导入的包。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:48:03