Python 3.12 Conda环境使用wandb时出现distutils模块缺失错误
Python 3.12 Conda环境中WandB启动报错:ModuleNotFoundError: No module named 'distutils'
问题描述
在Python 3.12版本的Conda环境中安装并运行最新版wandb时,会触发ModuleNotFoundError: No module named 'distutils'错误。根源在于wandb的依赖包dockerpycreds引用了已在Python 3.12中被移除的distutils模块。
复现步骤
- 创建Python 3.12的Conda环境:
conda create -n wandb_test_env python=3.12 conda activate wandb_test_env - 安装wandb:
pip install wandb - 执行wandb命令:
执行wandb --helpwandb --version也会触发该错误。
报错信息
Traceback (most recent call last): File "<env_path>/bin/wandb", line 5, in <module> from wandb.cli.cli import cli File "<env_path>/lib/python3.12/site-packages/wandb/__init__.py", line 21, in <module> from wandb import sdk as wandb_sdk File "<env_path>/lib/python3.12/site-packages/wandb/sdk/__init__.py", line 25, in <module> from .artifacts.artifact import Artifact File "<env_path>/lib/python3.12/site-packages/wandb/sdk/artifacts/artifact.py", line 40, in <module> from wandb.apis.normalize import normalize_exceptions File "<env_path>/lib/python3.12/site-packages/wandb/apis/__init__.py", line 44, in <module> from .public import Api as PublicApi # noqa File "<env_path>/lib/python3.12/site-packages/wandb/apis/public/__init__.py", line 1, in <module> from wandb.apis.public.api import Api, RetryingClient, requests File "<env_path>/lib/python3.12/site-packages/wandb/apis/public/api.py", line 40, in <module> from wandb.sdk.launch.utils import LAUNCH_DEFAULT_PROJECT File "<env_path>/lib/python3.12/site-packages/wandb/sdk/launch/__init__.py", line 1, in <module> from ._launch import create_and_run_agent, launch File "<env_path>/lib/python3.12/site-packages/wandb/sdk/launch/_launch.py", line 12, in <module> from . import loader File "<env_path>/lib/python3.12/site-packages/wandb/sdk/launch/loader.py", line 7, in <module> from wandb.docker import is_docker_installed File "<env_path>/lib/python3.12/site-packages/wandb/docker/__init__.py", line 8, in <module> from dockerpycreds.utils import find_executable # type: ignore File "<env_path>/lib/python3.12/site-packages/dockerpycreds/__init__.py", line 2, in <module> from .store import Store File "<env_path>/lib/python3.12/site-packages/dockerpycreds/store.py", line 9, in <module> from .utils import create_environment_dict File "<env_path>/lib/python3.12/site-packages/dockerpycreds/utils.py", line 1, in <module> import distutils.spawn ModuleNotFoundError: No module named 'distutils'
预期行为
wandb应能在Python 3.12环境中正常运行,不会因distutils模块缺失抛出错误。
解决方案
方案1:安装setuptools(推荐)
Python 3.12中distutils已被整合到setuptools包中,直接安装即可解决依赖问题:
pip install setuptools
安装完成后重新执行wandb命令即可正常使用。
方案2:通过Conda安装distutils
若方案1无效,可尝试通过conda-forge频道安装独立的distutils包:
conda install -c conda-forge distutils
方案3:等待依赖包官方修复
该问题属于dockerpycreds包的Python 3.12兼容性问题,后续官方发布适配版本后,更新依赖即可彻底解决。
内容的提问来源于stack exchange,提问作者Omri Hirsch
相关产品推荐
相关产品推荐

