侧边栏壁纸
博主头像
いちごみるく

行动起来,活在当下

  • 累计撰写 70 篇文章
  • 累计创建 48 个标签
  • 累计收到 55 条评论

目 录CONTENT

文章目录

Anaconda 中 Spyder、Jupyter 启动失败:环境与 pyzmq 排查

Anaconda、Spyder 或 Jupyter 启动异常应先确认解释器与依赖来源,再在独立环境定位。重新安装最新版 pyzmq 并不能解决所有启动问题;下文以 2023 年的报错为例说明排查顺序。

一、原故障中有几类信息

安装 Anaconda 后,Spyder 或 Jupyter 启动失败,当时日志包括:

Could not determine jupyterlab build status without nodejs
Bad file descriptor (C:\projects\libzmq\src\epoll.cpp:100)
Debugger warning: It seems that frozen modules are being used

这几行不能合并成同一个原因。Node.js 构建状态提示、调试器 frozen modules 提示,与 libzmq 的文件描述符错误分别来自不同组件。先保留完整 traceback 和进程退出信息,确认究竟是页面服务、内核还是 IDE 退出,不能见到任意一行就降级 pyzmq。

二、先确认修改的是哪个环境

在能够使用 Conda 的终端中,激活实际运行应用的环境,以下 myenv 替换为真实名称:

conda env list
conda activate myenv
python -c "import sys; print(sys.executable); print(sys.version)"
python -m pip --version
conda list --show-channel-urls
python -c "import zmq; print(zmq.__version__); print(zmq.zmq_version())"

最后一条若失败,记录错误即可,不要假设包版本已经读到。解释器路径、包来源和应用启动器必须对应;开始菜单快捷方式可能仍指向另一个环境。pip check 可以检查 pip 能识别的依赖约束,但不能证明 Conda 二进制库兼容或整个环境健康。

修改前导出环境记录,文件名选择尚未存在的位置:

conda env export --name myenv --file myenv-before.yml
conda list --name myenv --explicit > myenv-before-explicit.txt

这些记录不备份项目、Notebook、用户设置或所有外部文件。已有 pip 混装时也不能把 Conda 的修订回滚当作完整恢复方案。Conda 环境管理与 pip 混用说明

三、用独立环境缩小问题

保留原环境,创建一个新的测试环境。示例统一使用 conda-forge,不往现有 Anaconda base 中混入另一套渠道:

conda create --name ide-check --override-channels --channel conda-forge python spyder jupyterlab pyzmq
conda activate ide-check
conda config --env --add channels conda-forge
conda config --env --set channel_priority strict
python -c "import zmq; print(zmq.__version__, zmq.zmq_version())"
spyder

结束 Spyder 后,在同一环境单独启动 JupyterLab:

python -m jupyterlab

先测试一个简单单元格,再加入业务依赖。新环境正常只能帮助定位原环境冲突,不能证明 pyzmq 是唯一原因。新环境仍失败时,继续核对完整日志、解释器架构、软件版本和安全软件拦截;不要反复在原环境卸装包。

Spyder 当前也提供独立安装器,并建议将 IDE 与工作环境分开管理;使用外部解释器时,需要按该版本的要求安装兼容的 spyder-kernels。Spyder 安装指南

四、为什么固定降级到 19.0.2 可能失败

当时尝试安装老版本后,出现了源码构建失败:

2023 年 pyzmq 构建失败记录

Failed building wheel for pyzmq
Microsoft Visual C++ 14.0 is required
AttributeError: 'MSVCCompiler' object has no attribute '_vcruntime_redist'

某个老版本没有匹配当前 Python、操作系统或架构的 wheel 时,pip 可能转而编译源码。构建工具报错说明安装过程失败,不能推出运行时错误必须通过安装编译器解决;即便装齐编译器,旧源码也未必兼容新 Python。PyZMQ 构建说明

应优先让所选包管理器解出兼容版本。确需固定版本时,记录可重现的版本组合与依据,在测试环境验收启动、内核连接和实际计算,再决定是否迁移;不把“最新版”或“19.0.2”当作所有机器的答案。

1

评论区