Locust脚本本地运行正常,GitHub运行时出现ModuleNotFoundError
解决Locust脚本在GitHub运行时的ModuleNotFoundError问题
本地运行Locust脚本一切正常,但在GitHub环境执行时出现如下报错:
"/opt/venv/bin/locust", line 8, in <module> sys.exit(main()) File "/opt/venv/lib/python3.10/site-packages/locust/main.py", line 75, in main docstring, _user_classes, shape_class = load_locustfile(_locustfile) File "/opt/venv/lib/python3.10/site-packages/locust/util/load_locustfile.py", line 58, in load_locustfile imported = source.load_module() File "<frozen importlib._bootstrap_external>", line 548, in _check_name_wrapper File "<frozen importlib._bootstrap_external>", line 1063, in load_module File "<frozen importlib._bootstrap_external>", line 888, in load_module File "<frozen importlib._bootstrap>", line 290, in _load_module_shim File "<frozen importlib._bootstrap>", line 719, in _load File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/mnt/locust/main.py", line 17, in <module> from process_handler.TaskExecutor import TaskRunner ModuleNotFoundError: No module named 'process_handler'
这是因为GitHub环境的Python模块搜索路径和本地不一致,导致无法识别自定义的process_handler模块,可通过以下方法解决:
规范项目包结构
确保process_handler是合法的Python包,目录下必须包含__init__.py文件(空文件即可),项目结构示例:你的项目目录/ ├── main.py └── process_handler/ ├── __init__.py └── TaskExecutor.py手动添加项目根目录到Python路径
在main.py的开头添加以下代码,把项目根目录加入Python的模块搜索路径:import sys from pathlib import Path # 获取当前脚本所在的项目根目录 project_root = Path(__file__).parent # 添加到Python路径 sys.path.append(str(project_root))确认GitHub Actions的工作目录
在GitHub的workflow配置文件中,执行Locust命令前要切换到正确的项目目录,示例:steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 运行Locust working-directory: ./你的项目根目录名 # 替换成实际的项目目录 run: locust -f main.py改用相对导入(可选)
如果项目结构固定,可把main.py中的导入语句改成相对导入:from .process_handler.TaskExecutor import TaskRunner注意这种方式需要确保
main.py被当作包的一部分执行,或者运行Locust时指定正确的模块路径。
内容的提问来源于stack exchange,提问作者Badam Gurava Reddy
相关产品推荐
相关产品推荐

