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

Python项目中如何导入Git子模块内的模块?

可行的解决方法

方法1:修正sys.path的添加路径

你之前把submodule根目录加到sys.path,但Python需要定位到src目录才能识别src.lib的包结构。正确的做法是将submodule-repo-test/src路径添加到sys.path,这样就能直接从lib导入module:

import os
import sys

current_dir = os.path.dirname(os.path.abspath(__file__))
# 定位到子模块下的src目录
src_path = os.path.join(current_dir, '..', 'submodule-repo-test', 'src')
sys.path.append(src_path)

from lib import module

或者直接定位到lib目录,简化导入语句:

lib_path = os.path.join(current_dir, '..', 'submodule-repo-test', 'src', 'lib')
sys.path.append(lib_path)

import module

方法2:用importlib动态导入(适配含连字符的子模块名)

如果不想调整sys.path层级,可以保留子模块根目录在sys.path中,通过importlib模块绕开连字符的语法限制:

import os
import sys
import importlib

current_dir = os.path.dirname(os.path.abspath(__file__))
submodule_root = os.path.join(current_dir, '..', 'submodule-repo-test')
sys.path.append(submodule_root)

# 以字符串形式指定模块路径,动态导入
module = importlib.import_module('src.lib.module')

这种方式无需处理子模块名称中的连字符问题,因为importlib接受字符串格式的模块路径。

方法3:给子模块添加__init__.py(可选,需修改子模块)

如果你有权限修改子模块仓库,可以在submodule-repo-test、src、lib三个目录下分别添加空的__init__.py文件,让它们成为Python可识别的包结构。之后将子模块根目录加到sys.path,就能直接按包路径导入:

sys.path.append(submodule_root)
from src.lib import module

注意:这个方法需要改动子模块仓库的结构,若不想修改子模块,优先选择前两种方法。

方法4:通过PYTHONPATH环境变量导入(无需修改代码)

在运行main.py之前,将submodule-repo-test/src的绝对路径添加到PYTHONPATH环境变量中:

Linux/macOS终端:

export PYTHONPATH="/path/to/proj/submodule-repo-test/src:$PYTHONPATH"
python proj/test/main.py

Windows命令行:

set PYTHONPATH=C:\path\to\proj\submodule-repo-test\src;%PYTHONPATH%
python proj\test\main.py

设置完成后,Python会自动识别src下的包结构,你可以直接在main.py中写from lib import module。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:42:42