{"record":{"id":"44cb0825b90edb1c","repo":"Lightning-AI/pytorch-lightning","slug":"neither-tensorboard-nor-tensorboardx-is-availa","errorCode":null,"errorMessage":"Neither `tensorboard` nor `tensorboardX` is available. Try `pip install`ing either.\n{TENSORBOARDX_AVAILABLE}\n{TENSORBOARD_AVAILABLE}","messagePattern":"Neither `tensorboard` nor `tensorboardX` is available\\. Try `pip install`ing either\\.\n(.+?)\n(.+?)","errorType":"exception","errorClass":"ModuleNotFoundError","httpStatus":null,"severity":"error","filePath":"src/lightning/fabric/loggers/tensorboard.py","lineNumber":93,"sourceCode":"        logger.log_metrics({\"acc\": 0.75})\n        logger.finalize(\"success\")\n\n    \"\"\"\n\n    LOGGER_JOIN_CHAR = \"-\"\n\n    def __init__(\n        self,\n        root_dir: _PATH,\n        name: Optional[str] = \"lightning_logs\",\n        version: Optional[Union[int, str]] = None,\n        default_hp_metric: bool = True,\n        prefix: str = \"\",\n        sub_dir: Optional[_PATH] = None,\n        **kwargs: Any,\n    ):\n        if not _TENSORBOARD_AVAILABLE and not _TENSORBOARDX_AVAILABLE:\n            raise ModuleNotFoundError(\n                \"Neither `tensorboard` nor `tensorboardX` is available. Try `pip install`ing either.\\n\"\n                f\"{str(_TENSORBOARDX_AVAILABLE)}\\n{str(_TENSORBOARD_AVAILABLE)}\"\n            )\n        super().__init__()\n        root_dir = os.fspath(root_dir)\n        self._root_dir = root_dir\n        self._name = name or \"\"\n        self._version = version\n        self._sub_dir = None if sub_dir is None else os.fspath(sub_dir)\n\n        self._default_hp_metric = default_hp_metric\n        self._prefix = prefix\n        self._fs = get_filesystem(root_dir)\n\n        self._experiment: Optional[SummaryWriter] = None\n        self._kwargs = kwargs\n\n    @property","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/fabric/loggers/tensorboard.py#L75-L111","documentation":"The Fabric TensorBoardLogger requires either the `tensorboard` or `tensorboardX` package to write event files; if neither imports successfully, the constructor raises ModuleNotFoundError with the underlying import error messages.","triggerScenarios":"Instantiating `TensorBoardLogger(...)` in an environment where neither `tensorboard` nor `tensorboardX` is installed (or both fail to import due to broken installs/dependency conflicts).","commonSituations":"Fresh environments where only `torch` is installed; slim Docker images for training; prototyping locally without TensorBoard; broken tensorboard installs after upgrading protobuf/numpy.","solutions":["Install one of the backends: `pip install tensorboard` (or `pip install tensorboardX`)","If installation is broken, reinstall/upgrade: `pip install -U tensorboard` and check the embedded import error in the message","Alternatively switch to CSVLogger if TensorBoard is not needed"],"exampleFix":"# before\nfrom lightning.fabric.loggers import TensorBoardLogger\nlogger = TensorBoardLogger('logs/')  # ModuleNotFoundError\n\n# after (shell)\n# pip install tensorboard\nlogger = TensorBoardLogger('logs/')","handlingStrategy":"validation","validationCode":"from lightning.fabric.loggers.tensorboard import _TENSORBOARD_AVAILABLE, _TENSORBOARDX_AVAILABLE\nif not (_TENSORBOARD_AVAILABLE or _TENSORBOARDX_AVAILABLE):\n    from lightning.fabric.loggers import CSVLogger\n    logger = CSVLogger('logs')\nelse:\n    from lightning.fabric.loggers import TensorBoardLogger\n    logger = TensorBoardLogger('logs')","typeGuard":null,"tryCatchPattern":"try:\n    from lightning.fabric.loggers import TensorBoardLogger\n    logger = TensorBoardLogger('logs')\nexcept ModuleNotFoundError:\n    from lightning.fabric.loggers import CSVLogger\n    logger = CSVLogger('logs')","preventionTips":["Add tensorboard to training environment dependencies","Pin tensorboard version to avoid protobuf conflicts"],"tags":["pytorch-lightning","tensorboard","missing-dependency","logger"],"backgroundTag":"missing-optional-dependency","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}