GitHub Actions运行Python单元测试报Missing Module:无法找到src模块
问题根因
- 本地VS Code默认会将项目根目录加入Python的模块搜索路径
sys.path,所以from src import xxx的写法可以正常运行 - GitHub Action运行测试时,你将工作目录指定为了
test目录,且测试代码里的路径追加逻辑和导入写法不匹配:你把<项目根>/src目录加入了搜索路径,此时Python可以直接找到src下的模块,但无法找到名为src的模块,因此触发ModuleNotFoundError
可行解决方案
方案1:修改测试代码的路径与导入逻辑(优先推荐,一劳永逸)
两种修改方式二选一即可:
- 调整导入写法
保留原有路径追加逻辑,修改导入语句即可:
import sys, os.path import unittest src_path = (os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) + '/src/') sys.path.append(src_path) # 直接导入src下的模块,不需要加src前缀 import runner, utils, database, objects
- 调整追加的搜索路径
修改路径拼接逻辑,改为追加项目根目录到搜索路径,保留原有导入写法:
import sys, os.path import unittest # 追加项目根目录到sys.path,而非src目录本身 src_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) sys.path.append(src_path) from src import runner, utils, database, objects
方案2:修改GitHub Action配置(不需要动业务代码)
在运行测试的步骤中,将项目根目录加入PYTHONPATH环境变量即可,修改你的yml文件中Run Tests步骤:
- name: Run Tests run: python -m unittest test_hypedsearch working-directory: test env: PYTHONPATH: ${{ github.workspace }}
说明:${{ github.workspace }}是GitHub Action的内置变量,指向你项目的根目录,加入PYTHONPATH后Python就能找到根目录下的src模块
内容的提问来源于stack exchange,提问作者Jamie Dixon
相关产品推荐
相关产品推荐

