CircleCI运行Python测试时报pytest: command not found错误
CircleCI运行Selenium项目提示pytest: command not found 解决方案
核心原因
报错本质是Shell无法在当前环境的PATH路径列表中找到pytest可执行文件,触发127退出码。你配置中使用pip install pytest --user是直接诱因:CircleCI官方Python镜像默认以root用户运行,--user参数会将pytest安装到/root/.local/bin目录下,该目录默认不在环境变量PATH中,因此安装完成后依然无法直接调用pytest命令。
另外你的现有配置存在两处冗余问题,会干扰依赖安装逻辑:
- 重复执行pytest安装操作,既手动跑了pip install,又调用了python orb的install-packages步骤
- 没有自动读取项目根目录下已经声明好依赖的
requirements.txt,单独安装pytest容易出现版本、路径不一致问题
修复步骤
- 移除所有安装命令中的
--user参数,容器环境下直接全局安装pip包即可,安装后的可执行文件会自动进入系统PATH。 - 删掉单独手动安装pytest的run步骤,直接通过python orb的
install-packages命令自动读取requirements.txt安装全量依赖,包含你声明的pytest、selenium等包。 - 调用pytest时优先使用
python -m pytest格式,该方式会直接调用当前Python环境中安装的pytest模块,完全绕过PATH查找逻辑,是CI环境下最稳妥的调用方式,不会出现命令找不到的问题。
修正后的config.yml参考
version: 2.1 orbs: python: circleci/python@2.0.3 jobs: example-job: docker: - image: circleci/python:3.6.1 steps: - checkout # 自动读取requirements.txt安装所有依赖,默认开启pip缓存加速构建 - python/install-packages: pkg-manager: pip # 用模块方式调用pytest,彻底规避PATH异常 - run: command: python -m pytest businessObjects/test_Login.py workflows: example-workflow: jobs: - example-job
调试方法
如果调整后依然有异常,可以在安装依赖步骤后增加一行调试命令,确认pytest安装状态:
- run: pip list | grep pytest
执行后如果输出中能看到pytest对应的版本号,说明依赖安装成功,此时用python -m pytest调用必然可以正常运行。
如果你一定要用直接输入
pytest的调用方式,可以在安装依赖前先把用户目录的bin路径加入PATH,在steps最前面加一行配置即可:- run: echo 'export PATH=/root/.local/bin:$PATH' >> $BASH_ENV但这种方式需要额外维护环境变量,优先推荐用
python -m pytest的方案。
内容的提问来源于stack exchange,提问作者Naseem
相关产品推荐
相关产品推荐

