HKUDS/Vibe-Trading · error · TushareFallbackUnavailable
tushare import failed: {exc}
Error message
tushare import failed: {exc} What it means
_pro_api raises this when `import tushare` fails while building the fallback client. The tushare package is an optional dependency in this project, so any ImportError/ModuleNotFoundError during import is wrapped in TushareFallbackUnavailable instead of crashing the caller. The underlying exception text is chained and included in the message.
Source
Thrown at agent/src/tools/tushare_fallbacks.py:29
from typing import Any
from src.config.accessor import get_env_config
_TUSHARE_TOKEN_PLACEHOLDERS = {"", "your-tushare-token"}
class TushareFallbackUnavailable(RuntimeError):
"""Raised when the optional Tushare fallback cannot be used."""
def _pro_api() -> Any:
token = get_env_config().data.tushare_token.strip()
if token in _TUSHARE_TOKEN_PLACEHOLDERS:
raise TushareFallbackUnavailable("TUSHARE_TOKEN is not configured")
try:
import tushare as ts
except Exception as exc: # noqa: BLE001 - import errors vary by install
raise TushareFallbackUnavailable(f"tushare import failed: {exc}") from exc
return ts.pro_api(token)
def _records(frame: Any) -> list[dict[str, Any]]:
if frame is None:
return []
if bool(getattr(frame, "empty", False)):
return []
if hasattr(frame, "to_dict"):
rows = frame.to_dict("records")
return [row for row in rows if isinstance(row, dict)]
if isinstance(frame, list):
return [row for row in frame if isinstance(row, dict)]
return []
def _compact_date(value: str) -> str:
digits = str(value).strip().replace("-", "")View on GitHub (pinned to 80ffdda44c)
Solutions
- Install tushare into the same interpreter/venv the agent runs on (e.g. pip install tushare or add it to the optional extras)
- If the import error mentions another package (pandas, numpy), upgrade/align that dependency
- Confirm with `python -c "import tushare"` in the runtime environment
- If Tushare is intentionally unused, catch TushareFallbackUnavailable and skip the fallback path
Example fix
# before: package missing in runtime env pip install tushare # skipped / wrong venv # after pip install tushare python -c "import tushare; print(tushare.__version__)"
Defensive patterns
Strategy: try-catch
Validate before calling
def tushare_importable() -> bool:
try:
import tushare # noqa: F401
return True
except Exception:
return False
if tushare_importable() and tushare_ready():
data = fetch_dragon_tiger(trade_date=d)
else:
data = primary_source(d) Try / catch
try:
data = fetch_margin_trading(symbol, days=d)
except TushareFallbackUnavailable as exc:
if str(exc).startswith('tushare import failed'):
# optional dependency missing in this env; degrade gracefully
data = primary_source(symbol, days=d)
else:
raise Prevention
- Pin tushare (and its pandas/numpy deps) in the lockfile or an extras group
- Smoke-test imports in the deployed interpreter: python -c 'import tushare'
- Never assume optional dependencies exist — guard or catch before relying on fallback data
When it happens
Trigger: Calling any of fetch_fund_flow, fetch_dragon_tiger, fetch_northbound_flow, or fetch_margin_trading on an environment where the tushare package is not installed, is installed for a different interpreter/virtualenv, or fails at import time due to a broken dependency (e.g. missing pandas or an incompatible numpy).
Common situations: Deploying without the extras/optional dependency group that includes tushare; running under a different Python than the one used by pip; a transitive dependency version conflict breaking the import; partially corrupted site-packages.
Related errors
- WhatsApp dependencies not installed. Run: pip install "vibe-
- TUSHARE_TOKEN is not configured
- invalid date for tushare fallback: {value!r}
- YAML config is not available because PyYAML is missing
- TUSHARE_TOKEN not in agent/.env or environment; required for
AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28).
Data as JSON: /api/errors/7577c89cdcecf4f6.
Report an issue: GitHub.