{"record":{"id":"621672fe1c8e6b34","repo":"microsoft/qlib","slug":"cannot-find-config-file","errorCode":null,"errorMessage":"Cannot find config file {}","messagePattern":"Cannot find config file (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"qlib/contrib/online/manager.py","lineNumber":107,"sourceCode":"        )\n        save_instance(\n            self.users[user_id].model,\n            self.data_path / user_id / \"model_{}.pickle\".format(user_id),\n        )\n\n    def add_user(self, user_id, config_file, add_date):\n        \"\"\"\n        add the new user {user_id} into user data\n        will create a new folder named \"{user_id}\" in user data path\n            Parameter\n                user_id : string\n                init_cash : int\n                config_file : str/pathlib.Path()\n                   path of config file\n        \"\"\"\n        config_file = pathlib.Path(config_file)\n        if not config_file.exists():\n            raise ValueError(\"Cannot find config file {}\".format(config_file))\n        user_path = self.data_path / user_id\n        if user_path.exists():\n            raise ValueError(\"User data for {} already exists\".format(user_id))\n\n        with config_file.open(\"r\") as fp:\n            yaml = YAML(typ=\"safe\", pure=True)\n            config = yaml.load(fp)\n        # load model\n        model = init_instance_by_config(config[\"model\"])\n\n        # load strategy\n        strategy = init_instance_by_config(config[\"strategy\"])\n        init_args = strategy.get_init_args_from_model(model, add_date)\n        strategy.init(**init_args)\n\n        # init Account\n        trade_account = Account(init_cash=config[\"init_cash\"])\n","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/contrib/online/manager.py#L89-L125","documentation":"Raised by UserManager.add_user when the YAML config file path passed in does not exist on disk. The user's model and strategy are built from this config (init_instance_by_config on config['model'] / config['strategy']), so the file must be readable before any user data folder is created.","triggerScenarios":"Calling um.add_user(user_id, config_file, add_date) with a wrong/typo'd path, a relative path resolved against the wrong working directory, or a path on an unmounted share.","commonSituations":"Running the online-serving scripts from a different cwd so relative config paths break; deploying to a server where the yaml was not copied; trailing whitespace or quotes in the path from shell interpolation.","solutions":["Check the path exists before calling: pathlib.Path(config_file).resolve().exists().","Use absolute paths for config_file when invoking add_user from scripts/cron.","Verify the file was actually copied/mounted in the deployment environment (ls the directory)."],"exampleFix":"# before\num.add_user(user_id=\"u1\", config_file=\"configs/u1.yaml\", add_date=d)\n# ValueError: Cannot find config file configs/u1.yaml\n\n# after\nimport pathlib\ncfg = pathlib.Path(\"configs/u1.yaml\").resolve()\nassert cfg.exists(), f\"missing config: {cfg}\"\num.add_user(user_id=\"u1\", config_file=cfg, add_date=d)","handlingStrategy":"validation","validationCode":"import pathlib\ncfg = pathlib.Path(config_file).resolve()\nif not cfg.is_file():\n    raise FileNotFoundError(f\"user config missing: {cfg}\")\num.add_user(user_id=user_id, config_file=cfg, add_date=add_date)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Resolve config paths to absolute at script start.","Fail fast on missing files in deployment bootstrap checks.","Verify deployment artifacts (yaml configs) are shipped with the job."],"tags":["qlib","online-manager","config","file-not-found","paths"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}