VSCode 导入库失败,十有八九不是库没装,而是编辑器用错了 Python 解释器:代码能正常打开,一按运行就抛 ModuleNotFoundError,终端里还常常跟着一句「不是内部或外部命令,也不是可运行的程序」。这类情况在 Windows 和 Kali 上表现不一样,根子却是同一条。先在 TaoToken(https://taotoken.net/?utm_source=taotoken_aicg_blog_end)注册并创建一把 API Key,再把 Codex 的 Base URL 填成 https://taotoken.net/api,让它读你的 .py 文件、VSCode 设置和终端报错,逐项核对解释器路径、PATH 和 venv 到底有没有被选中。TaoToken 在这里只提供 Key 和统一的 Base URL,Python 和 VSCode 自身的问题仍然要回到编辑器里去改,它不会替你装库,也不会替你点选解释器。
1. 先看清楚 VSCode 用的到底是哪个 python.exe
1.1 同一个 ModuleNotFoundError,在 Windows 和 Kali 上长得不一样
Windows 上最常见的样子是:脚本里写了import requests,F5 一跑,底部终端刷出ModuleNotFoundError: No module named 'requests',你转头在终端敲pip install requests,提示Requirement already satisfied,于是整个人卡住。原因很简单,pip 把包装进了 A 解释器,VSCode 运行脚本时用的是 B 解释器,两边根本不是同一个 Python。
Kali 上的报错长得更「系统化」一些,可能是/usr/bin/python3: No module named requests,也可能直接是zsh: command not found: python。Kali 默认没有python这个命令名,只有python3,很多从 Windows 过来的同学习惯性写python xxx.py,第一步就断了。再加上 Debian 系从 PEP 668 开始会拦pip install,报externally-managed-environment,新手很容易误判成「Kali 装不了库」。
这两种表现指向同一件事:你要先确认「VSCode 把哪个可执行文件当成 Python」,而不是急着反复pip install。这个问题不确认,装十遍库也没用。
1.2 三个必须先抄下来的信息
排查前先收集证据,别凭记忆。建议把下面三样东西复制到一个临时 txt 里,后面无论是自己看还是丢给 Codex 分析,都用得上。
第一样是 VSCode 当前选中的解释器路径。快捷键Ctrl+Shift+P,输入Python: Select Interpreter,面板里会列出候选,当前生效的那条前面有对勾;也可以看窗口右下角状态栏,鼠标悬停会显示完整路径。
第二样是终端里的解释器路径。Windows PowerShell 用where.exe python,Kali 用which python python3,再把python -V或python3 -V的输出版本一起记下来。
第三样是报错原文,一定是完整那一段,包括最后一行。很多人只截第一行ModuleNotFoundError,把真正有用的File "..."调用栈丢了。调用栈里会写清楚是哪个文件、哪一行触发的导入,这对判断「是脚本自己的问题还是环境的问题」非常关键。
2. Windows 装 Python、Kali 装 python3-venv:原文那几步照做,PATH 要盯紧
2.1 Windows 安装包上的勾选项,决定了后面所有报错
Windows 装 Python 时,安装向导第一屏底部有个Add python.exe to PATH的勾,勾上它,后面能省掉一大半「不是内部或外部命令」。如果当时没勾,也不用重装,重新跑一遍安装包选 Modify 补勾即可,或者手动把安装目录和Scripts目录加进系统环境变量 Path。
安装路径尽量别放带空格和中文的目录,C:\Python312或者D:\dev\Python312都比C:\Program Files\...省心。装完之后验证一下:打开新的 PowerShell,执行py -0p,这个命令会把机器上所有已注册的 Python 解释器连路径一起列出来。如果py -0p能列出好几条,说明你机器上确实存在多个 Python,之前那个「装了这个解释器、跑的是另一个」的怀疑基本就坐实了。
顺带记住一条:Windows 上py是启动器,python是具体命令,两者不一定指向同一个解释器,排查时优先信where.exe python的输出。
2.2 Kali 上别急着 sudo pip,先把 python3-venv 补齐
Kali 装 Python 相关工具,一条命令足够:
sudo apt update sudo apt install -y python3 python3-pip python3-venvpython3-venv这个包经常被漏掉,漏了之后python3 -m venv .venv会报ensurepip is not available,你以为是 Python 坏了,其实就是缺个小包。如果要用一些全局命令行工具,优先用pipx install 工具名,它会把工具装进独立环境并自动挂到 PATH,比sudo pip干净得多。
在 Kali 上跑pip install看到externally-managed-environment时,不要用--break-system-packages硬顶,那是把系统 Python 当试验场。正确做法是把依赖装进 venv,venv 里的 pip 不会被这条限制拦。
2.3 pip 镜像与「权限不足」到底是谁的问题
国内网络环境下,pip 默认源慢,配个镜像顺手也值得。Windows 的配置文件在%APPDATA%\pip\pip.ini,Kali 在~/.config/pip/pip.conf或/etc/pip.conf,内容格式一致:
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn timeout = 60配完执行pip config list能看到生效值。至于Permission denied或Defaulting to user installation这类提示,本质是当前用户没权限往系统 site-packages 写。Kali 上不要用sudo pip解决,Windows 上不要用管理员 PowerShell 解决,这两种做法都会把依赖装到 venv 外面,反而制造出下一个「解释器选错」的坑。正确姿势是激活 venv 之后再装,装到项目自己的目录里。
3. VSCode 插件和 settings.json:把解释器钉死在某个 venv 上
3.1 插件装哪几个就够
Python 扩展(Microsoft 官方那个,扩展 ID 是ms-python.python)必装,它带来解释器选择、运行、调试、终端自动激活这一整套能力。Pylance 一般会作为依赖自动装上,负责补全和类型提示。写网安脚本经常要处理 JSON、YAML、十六进制数据,可以再加一个 YAML 扩展,其他花哨的插件先别堆,插件越多越容易互相干扰。
装完之后按Ctrl+Shift+P执行Developer: Reload Window,让扩展完整加载。这一步很多人跳过,结果选择解释器的命令面板项都搜不到。
3.2 命令面板选解释器:一次性选中不等于长期生效
Python: Select Interpreter选完之后,VSCode 会在当前工作区记住这个选择,但记住的粒度是「工作区」,不是全局。你用「打开文件夹」的方式打开项目,它就存在这个文件夹的.vscode/settings.json或工作区存储里;你用「打开单个文件」的方式打开一个 .py,它可能只是临时生效,关掉再开又变回默认解释器。
所以真正稳妥的做法是:用文件夹方式打开项目,然后在项目根目录建.vscode/settings.json,把解释器路径写死。这样不管换机器、换终端、换 shell,只要文件夹结构一样,选中的就是同一个解释器。
3.3 .vscode/settings.json 在两平台该怎么写
Windows 项目的 venv 目录结构是.venv\Scripts\python.exe,Kali 是.venv/bin/python,这是两平台最容易被忽略的差异,写错一个分隔符或目录名,VSCode 就退回默认解释器。
Windows 工作区:
{ "python.defaultInterpreterPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe", "python.terminal.activateEnvironment": true, "python.analysis.extraPaths": ["${workspaceFolder}"] }Kali 工作区:
{ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", "python.terminal.activateEnvironment": true, "python.analysis.extraPaths": ["${workspaceFolder}"] }python.terminal.activateEnvironment打开后,新开的集成终端会自动激活 venv,pip install和python xxx.py用的就是同一个环境。值得注意的是,这个设置只对新开的终端生效,已经开着的那个终端还留着旧的环境变量,改完设置记得把终端面板整个关掉重开。
4. venv 建了但没激活,等于没建:两平台命令与终端验证
4.1 Windows 上建 venv 并激活
在项目根目录打开 PowerShell:
py -3 -m venv .venv .\.venv\Scripts\Activate.ps1 python -V where.exe python如果第二条报「因为在此系统上禁止运行脚本」,那是 PowerShell 的执行策略问题,用Set-ExecutionPolicy -Scope CurrentUser RemoteSigned放开当前用户即可,不需要管理员权限。激活成功后提示符前面会出现(.venv),where.exe python的第一行应该是项目下的.venv\Scripts\python.exe,如果第一行还是C:\Users\...\AppData\Local\Programs\Python\...,说明激活没成功,或者 PATH 里系统解释器排在前面。
4.2 Kali 上建 venv 并激活
cd ~/sec-scripts python3 -m venv .venv source .venv/bin/activate python -V which python激活后which python应该输出/home/你的用户名/sec-scripts/.venv/bin/python。注意 Kali 上很多教程还在用python这个命令名,如果 venv 激活了仍然command not found,用python3再试一次;venv 内部一般会同时提供python和python3两个软链,但有些镜像的配置不完整,以which python3为准更保险。
4.3 一张对照表,把平台差异说清楚
| 检查点 | Windows(PowerShell) | Kali(bash/zsh) |
|---|---|---|
| 创建环境 | py -3 -m venv .venv | python3 -m venv .venv |
| 激活 | .\.venv\Scripts\Activate.ps1 | source .venv/bin/activate |
| 退出 | deactivate | deactivate |
| 解释器位置 | .venv\Scripts\python.exe | .venv/bin/python |
| 查询路径 | where.exe python | which python python3 |
| 装依赖 | .venv激活后直接pip install 包名 | 同左,不要加 sudo |
这张表建议直接贴在项目 README 里。双平台搭环境的项目,最常见的翻车点不是命令不会敲,而是「在这台机器上激活了,在另一台机器上忘了激活,然后开始怀疑代码」。
5. 把 Codex 接到 TaoToken,让它读 .py、settings.json 和报错
5.1 先拿 Key:注册、建 Key、记模型 ID
打开 TaoToken 注册账号,进控制台创建一把 API Key,复制出来先用占位符代替,别直接贴进聊天记录里。同一页顺手看看模型广场,确认当前可用的模型 ID 是什么,先抄下来,等会儿要填进配置文件。记住一点:官网页面和接口地址是两回事,注册、创建 Key、看模型列表、看用量都在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 上做,而填进工具里的 Base URL 是另一个地址,下面会写。
Key 不需要每个项目新建一把,同一把 Key 可以给多个工具共用,方便后面统计用量。如果确实要区分项目,建 Key 的时候把备注写清楚,一周之后你还能认出来哪把是哪把。
5.2 ~/.codex/config.toml 里把 base_url 指向 TaoToken
Codex 的配置文件在用户目录下的.codex/config.toml。Windows 上是C:\Users\你的用户名\.codex\config.toml,Kali 上是~/.codex/config.toml,文件不存在就自己新建。
model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"model填模型 ID,以 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 上模型广场当时的列表为准,不要凭印象写一个记得见过的名字。base_url就是https://taotoken.net/api,末尾不要加/v1,这一点后面排障还会再提一次。
Key 通过环境变量传进去,不写进配置文件:
export TAOTOKEN_API_KEY=YOUR_API_KEY$env:TAOTOKEN_API_KEY="YOUR_API_KEY"上面两行只对当前会话生效,Kali 想永久生效可以写进~/.bashrc,Windows 想要永久生效就在系统环境变量里新建一条。Key 始终用YOUR_API_KEY占位,真实 Key 从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的控制台里创建和复制。
5.3 让 Codex 排查,但命令必须你自己在本地敲
这是整个流程里最需要说清楚的一点。Codex 不能连上你的 Windows 笔记本或者 Kali 虚拟机,它看不到你的文件系统,也不会替你去点 VSCode 的下拉框。它能做的是:读你贴过去的.py内容、.vscode/settings.json内容、终端报错原文,然后告诉你问题出在哪一类、应该改哪一行。
一个可用的提示词模板:
我在 VSCode 里运行 Python 脚本报错了,报错原文、settings.json 内容、终端路径查询结果都在下面。 请只做三件事: 1) 判断这属于哪一类问题:库没装 / 装到了别的解释器 / PATH 顺序不对 / venv 没激活 / 终端没重开。 2) 按可能性从高到低给修改建议,并指出应该改 settings.json 里的哪一行。 3) 给我一串需要我自己在本地终端执行的验证命令,并说明每条命令的期望输出是什么。 所有命令我自己执行,你只负责解释和给建议,不要假设你能访问我的机器。 【报错原文】 (粘贴完整调用栈) 【.vscode/settings.json】 (粘贴内容) 【终端输出】 where.exe python / which python python3 的原始输出这个模板的好处是把「执行」和「判断」分开了。你负责采数据、执行命令,Codex 负责归因和给方向。网上那些「让 AI 直连你的环境去跑命令」的说法,在真实项目里既不安全也不稳定,尤其是你手上这台机器可能同时挂着公司内网和一堆配置文件。
6. 发一次请求确认通了,再回 VSCode 改解释器
6.1 一次最小验证就够了
配置写完后,先别急着排查具体的库。用一条最简单的提问确认链路通不通,比如在 Codex 里问:
我的 VSCode 里 python.defaultInterpreterPath 指向 .venv\Scripts\python.exe, 但终端 where.exe python 的第一行输出是 C:\Users\me\AppData\Local\Programs\Python\Python312\python.exe。 这两者不一致会导致什么现象?我该以哪一个为准?如果它能返回一段有条理的分析,说明 Key、base_url、模型 ID 三件套都对了,接下来所有排查都可以在同一个会话里继续。如果这条都发不出去,先解决连接问题,别往下走——环境没通的时候,Codex 给的建议再多也没法验证。
6.2 常见的三类连接报错,对照着改
| 现象 | 大概率原因 | 处理方式 |
|---|---|---|
| 401 Unauthorized | Key 复制时带空格,或环境变量没生效 | 重新从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 复制,确认TAOTOKEN_API_KEY在当前会话里能 echo 出来 |
| 404 / Not Found | base_url 末尾多了/v1,或者把官网页面地址填进了 base_url | base_url 固定写https://taotoken.net/api,官网地址只用来注册和建 Key |
| 提示模型不存在 | 模型 ID 是凭记忆写的 | 回模型广场看当时的可用列表,重新填model |
这三类错误有个共同点:都不是 Codex 的问题,也不是 Python 的问题,纯粹是配置字符串填错。排查顺序上,先确认这三项,再去怀疑脚本和库。
6.3 拿到建议后,回 VSCode 把解释器真正切过去
假设 Codex 的判断是「终端里跑的是系统 Python,VSCode 运行脚本时用的是另一个」,那就按下面顺序动手:Ctrl+Shift+P执行Python: Select Interpreter,在列表里选带.venv的那条;看一眼右下角状态栏是否同步变了;把集成终端整个关掉再新开一个(旧终端的 PATH 是旧值);在新终端里再跑一次where.exe python或which python,确认第一行已经指向项目内的 venv;最后再跑一遍原来报错的脚本。
如果脚本仍然报 ModuleNotFoundError,但报的是另一个库名,那就说明解释器已经对了,只是这个库确实没装,激活 venv 后pip install 包名装上就行。这个从「环境问题」到「依赖问题」的切换,是整个排查里最有价值的一步,因为前者会让人反复怀疑自己,后者只需要一条命令。
7. 这次的 Key 和用量,回控制台对一下
排查跑通之后,建议做两件收尾的事。第一件是回 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的控制台,看这次请求有没有正常记上账、用了多少 token,顺便确认模型 ID 和你在 config.toml 里填的是同一个。用量对不上,往往意味着你本地还有另一份配置在生效,比如环境变量里藏着旧 Key。
第二件是把这次踩过的路径顺手记进项目 README:venv 在哪个目录、settings.json 写的是哪条路径、终端查询命令是什么。下次换机器或者换到 Kali 上重搭,照着 README 走一遍就行,不用再重新排查一次。
想继续往下走的话,先去 TaoToken 模型对话 用同一把 Key 发条消息,确认这条通道和你在 Codex 里用的是同一个模型;打算长期拿它看报错、写脚本,可以打开 Coding Plan 看套餐档位;需要按项目分开管 Key,就在 控制台 API Keys 里新建;想把这套 Base URL 接法搬到别的命令行工具,Claude Code 接入文档 里的环境变量写法可以直接对照着改。