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

Docker环境下从Python脚本调用pytest遇模块缺失问题求助

问题原因

单独执行pytest正常,但脚本调用时出现no modules named xyz,核心原因是PyCharm启动Docker后会自动将项目根目录加入Python的sys.path,但你自己编写的调用脚本没有同步这个路径配置,导致pytest运行时无法找到项目内的模块。

修正方案

方法1:修正subprocess调用

需要确保pytest在项目根目录下执行,或者显式指定环境变量:

方案A:指定工作目录

import subprocess

# 替换为你的项目根目录绝对路径
project_root = '/User/~my_workspace/python_project'
# 用run代替Popen(更适合同步执行测试),指定cwd为项目根
subprocess.run(
    ['pytest', 'path_to_script/my_script.py'],
    cwd=project_root,
    check=True,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True
)

方案B:通过shell命令切换目录执行

import subprocess

# 直接拼接shell命令,先切换到项目根再执行pytest
subprocess.run(
    'cd /User/~my_workspace/python_project && pytest path_to_script/my_script.py',
    shell=True,
    check=True,
    text=True
)

方法2:修正pytest.main调用

手动将项目根目录添加到sys.path,再调用pytest:

import sys
from pathlib import Path
import pytest

# 项目根目录绝对路径
project_root = Path('/User/~my_workspace/python_project')
# 将项目根加入Python路径,确保模块能被找到
sys.path.insert(0, str(project_root))

# 执行测试,路径相对于项目根
pytest.main(['path_to_script/my_script.py'])
额外注意事项
  • 确保调用脚本使用的Python解释器是Docker容器内的解释器(PyCharm中需配置远程解释器指向Docker容器,而非本地Python)
  • 检查Docker容器内的项目目录映射是否和PyCharm一致,避免路径错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:10:30