➜ git fan
https://www.v2ex.com/t/1229454\#reply2
╭───────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────╮
│ /root/.nvm/versions/node/v24.12.0/lib/node_modules/fantread/.fantread-venv/lib64/python3.12/site-packages/fantread/c │
│
li.py:151 in read_command │
│ │
│ 148 │ │ user_prompt = prepare_user_prompt(prompt) │
│ 149 │ │ │
│ 150 │ │ with err_console.status("[cyan]正在读取并清理页面…[/cyan]"): │
│ ❱ 151 │ │ │ article = ArticleExtractor(timeout=timeout).fetch_and_extract(url) │
│ 152 │ │ _show_article_ready(article) │
│ 153 │ │ │
│ 154 │ │ if choose_model_interactively: │
│ │
│ /root/.nvm/versions/node/v24.12.0/lib/node_modules/fantread/.fantread-venv/lib64/python3.12/site-packages/fantread/e │
│
xtractor.py:71 in fetch_and_extract │
│ │
│ 68 │ def fetch_and_extract(self, url: str) -> Article: │
│ 69 │ │ normalized_url = self.normalize_url(url) │
│ 70 │ │ try: │
│ ❱ 71 │ │ │ with httpx.Client( │
│ 72 │ │ │ │ headers={ │
│ 73 │ │ │ │ │ "User-Agent": USER_AGENT, │
│ 74 │ │ │ │ │ "Accept": "text/html,application/xhtml+xml,text/plain;q=0.9,*/*;q=0.5", │
│ │
│ /root/.nvm/versions/node/v24.12.0/lib/node_modules/fantread/.fantread-venv/lib64/python3.12/site-packages/httpx/_cli │
│
ent.py:700 in __init__ │
│ │
│ 697 │ │ self._mounts: dict[URLPattern, BaseTransport | None] = { │
│ 698 │ │ │ URLPattern(key): None │
│ 699 │ │ │ if proxy is None │
│ ❱ 700 │ │ │ else self._init_proxy_transport( │
│ 701 │ │ │ │ proxy, │
│ 702 │ │ │ │ verify=verify, │
│ 703 │ │ │ │ cert=cert, │
│ │
│ /root/.nvm/versions/node/v24.12.0/lib/node_modules/fantread/.fantread-venv/lib64/python3.12/site-packages/httpx/_cli │
│
ent.py:750 in _init_proxy_transport │
│ │
│ 747 │ │ http2: bool = False, │
│ 748 │ │ limits: Limits = DEFAULT_LIMITS, │
│ 749 │ ) -> BaseTransport: │
│ ❱ 750 │ │ return HTTPTransport( │
│ 751 │ │ │ verify=verify, │
│ 752 │ │ │ cert=cert, │
│ 753 │ │ │ trust_env=trust_env, │
│ │
│ /root/.nvm/versions/node/v24.12.0/lib/node_modules/fantread/.fantread-venv/lib64/python3.12/site-packages/httpx/_tra │
│ nsports/
default.py:191 in __init__ │
│ │
│ 188 │ │ │ try: │
│ 189 │ │ │ │ import socksio # noqa │
│ 190 │ │ │ except ImportError: # pragma: no cover │
│ ❱ 191 │ │ │ │ raise ImportError( │
│ 192 │ │ │ │ │ "Using SOCKS proxy, but the 'socksio' package is not installed. " │
│ 193 │ │ │ │ │ "Make sure to install httpx using `pip install httpx[socks]`." │
│ 194 │ │ │ │ ) from None │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
ImportError: Using SOCKS proxy, but the 'socksio' package is not installed. Make sure to install httpx using `pip
install httpx[socks]`.