安装PyTorch后无法导入Optuna,报TypeError错误求助
Optuna导入失败,疑似与PyTorch冲突
问题概述
安装PyTorch前所有功能正常,安装后Optuna无法导入,推测是两者依赖冲突导致。已尝试将所有包更新至最新版本,问题仍未解决。同时PyTorch还导致matplotlib异常,尝试过'truetype'版本修复方案无效。
核心报错信息
TypeError: dataclass_transform() got an unexpected keyword argument 'field_specifiers'
完整报错栈
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-11-44e13f4113b4> in <module> 89 from IPython.display import clear_output 90 ---> 91 import optuna ~\.conda\envs\Alex_env\lib\site-packages\optuna\__init__.py in <module> 3 from optuna import integration 4 from optuna import logging ----> 5 from optuna import multi_objective 6 from optuna import pruners 7 from optuna import samplers ~\.conda\envs\Alex_env\lib\site-packages\optuna\multi_objective\__init__.py in <module> 1 from optuna._imports import _LazyImport ----> 2 from optuna.multi_objective import samplers 3 from optuna.multi_objective import study 4 from optuna.multi_objective import trial 5 from optuna.multi_objective.study import create_study ~\.conda\envs\Alex_env\lib\site-packages\optuna\multi_objective\samplers\__init__.py in <module> ----> 1 from optuna.multi_objective.samplers._adapter import _MultiObjectiveSamplerAdapter 2 from optuna.multi_objective.samplers._base import BaseMultiObjectiveSampler 3 from optuna.multi_objective.samplers._motpe import MOTPEMultiObjectiveSampler 4 from optuna.multi_objective.samplers._nsga2 import NSGAIIMultiObjectiveSampler 5 from optuna.multi_objective.samplers._random import RandomMultiObjectiveSampler ~\.conda\envs\Alex_env\lib\site-packages\optuna\multi_objective\samplers\_adapter.py in <module> 4 from optuna import multi_objective 5 from optuna.distributions import BaseDistribution ----> 6 from optuna.samplers import BaseSampler 7 from optuna.study import Study 8 from optuna.trial import FrozenTrial ~\.conda\envs\Alex_env\lib\site-packages\optuna\samplers\__init__.py in <module> ----> 1 from optuna.samplers import nsgaii 2 from optuna.samplers._base import BaseSampler 3 from optuna.samplers._brute_force import BruteForceSampler 4 from optuna.samplers._cmaes import CmaEsSampler 5 from optuna.samplers._grid import GridSampler ~\.conda\envs\Alex_env\lib\site-packages\optuna\samplers\nsgaii\__init__.py in <module> ----> 1 from optuna.samplers.nsgaii._crossovers._base import BaseCrossover 2 from optuna.samplers.nsgaii._crossovers._blxalpha import BLXAlphaCrossover 3 from optuna.samplers.nsgaii._crossovers._sbx import SBXCrossover 4 from optuna.samplers.nsgaii._crossovers._spx import SPXCrossover 5 from optuna.samplers.nsgaii._crossovers._undx import UNDXCrossover ~\.conda\envs\Alex_env\lib\site-packages\optuna\samplers\nsgaii\_crossovers\_base.py in <module> 3 import numpy as np 4 ----> 5 from optuna.study import Study 6 7 ~\.conda\envs\Alex_env\lib\site-packages\optuna\study\__init__.py in <module> 2 from optuna.study._study_direction import StudyDirection 3 from optuna.study._study_summary import StudySummary ----> 4 from optuna.study.study import copy_study 5 from optuna.study.study import create_study 6 from optuna.study.study import delete_study ~\.conda\envs\Alex_env\lib\site-packages\optuna\study\study.py in <module> 24 from optuna import pruners 25 from optuna import samplers ----> 26 from optuna import storages 27 from optuna import trial as trial_module 28 from optuna._convert_positional_args import convert_positional_args ~\.conda\envs\Alex_env\lib\site-packages\optuna\storages\__init__.py in <module> 3 from optuna._callbacks import RetryFailedTrialCallback 4 from optuna.storages._base import BaseStorage ----> 5 from optuna.storages._cached_storage import _CachedStorage 6 from optuna.storages._heartbeat import fail_stale_trials 7 from optuna.storages._in_memory import InMemoryStorage ~\.conda\envs\Alex_env\lib\site-packages\optuna\storages\_cached_storage.py in <module> 17 from optuna.storages import BaseStorage 18 from optuna.storages._heartbeat import BaseHeartbeat ----> 19 from optuna.storages._rdb.storage import RDBStorage 20 from optuna.study._frozen import FrozenStudy 21 from optuna.study._study_direction import StudyDirection ~\.conda\envs\Alex_env\lib\site-packages\optuna\storages\_rdb\storage.py in <module> 28 from optuna.storages._base import DEFAULT_STUDY_NAME_PREFIX 29 from optuna.storages._heartbeat import BaseHeartbeat ----> 30 from optuna.storages._rdb.models import TrialValueModel 31 from optuna.study._frozen import FrozenStudy 32 from optuna.study._study_direction import StudyDirection ~\.conda\envs\Alex_env\lib\site-packages\optuna\storages\_rdb\models.py in <module> 17 from sqlalchemy import func 18 from sqlalchemy import Integer ----> 19 from sqlalchemy import orm 20 from sqlalchemy import String 21 from sqlalchemy import Text ~\.conda\envs\Alex_env\lib\site-packages\sqlalchemy\orm\__init__.py in <module> 55 from .context import FromStatement as FromStatement 56 from .context import QueryContext as QueryContext ----> 57 from .decl_api import add_mapped_attribute as add_mapped_attribute 58 from .decl_api import as_declarative as as_declarative 59 from .decl_api import declarative_base as declarative_base ~\.conda\envs\Alex_env\lib\site-packages\sqlalchemy\orm\decl_api.py in <module> 160 composite, 161 synonym, ---> 162 deferred, 163 ), 164 )
解决方案
这个错误本质是sqlalchemy和typing_extensions版本不兼容导致的,PyTorch安装时可能自动调整了typing_extensions版本,和Optuna依赖的sqlalchemy参数要求不匹配。
具体修复步骤:
- 卸载当前冲突的包:
pip uninstall -y typing_extensions sqlalchemy
- 安装兼容版本组合:
- 方案一(推荐):适配新版sqlalchemy
pip install sqlalchemy>=2.0.0 typing_extensions>=4.6.0- 方案二:保留旧版sqlalchemy
pip install typing_extensions==4.5.0 sqlalchemy==1.4.49 - 验证Optuna导入是否正常:
import optuna
matplotlib异常补充修复
如果是字体显示问题,直接指定可用字体:
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 替换为你系统中存在的字体 plt.rcParams['axes.unicode_minus'] = False
如果是依赖冲突,降级matplotlib到兼容版本:
pip install matplotlib==3.7.1
内容的提问来源于stack exchange,提问作者Thoughtful_Jeffrie
相关产品推荐
相关产品推荐

