jupyter和pyzmq之间的一些个奇葩坑

导读

估计不少人和我遇到了同样的问题,jupyter-clientpyzmq两个永远不在同一个星球的家伙。这次将解决方法记下来,免得以后遇到了还是得重新找解决方案。

发现问题

如果全都是安装最新版,那么jupyter-clientpyzmq永远都能保持一致,因为互相都是依赖最新的内容,互相都在进步。

可问题是,我目前需要安装的是paddle2.0。整理其中的依赖,会发现有这些东西:

名称版本
Jinja23.1.2
MarkupSafe2.1.1
absl-py1.1.0
click8.1.3
cloudpickle1.6.0
flask2.1.2
flask-cors3.0.10
grpcio1.47.0
importlib-metadata4.12.0
itsdangerous2.1.2
markdown3.3.7
parl2.0.4
psutil5.9.1
pyzmq18.1.1
scipy1.7.3
tb-nightly1.15.0a20190801
tensorboardX1.8
termcolor1.1.0
typing-extensions4.3.0
werkzeug2.1.2
zipp3.8.0

其中,我们可以看到,pyzmq的版本是 18.1.1 18.1.1 18.1.1。而jupyterlab 3.2.9 3.2.9 3.2.9版本中,pyzmq的版本是 23.2.0 23.2.0 23.2.0,两者差得不是一点半点。

那么问题要怎么解决呢?

可惜的是,目前找遍全网并没有说明一个可行的版本规则,于是只能回去查询GitHub中的源码看有没有提示。

GitHub版本回溯查询

一番查询,找到了jupyter的官方代码库

想起来之前在使用Git提交代码的时候,能够通过tag参数说明当前提交的库处于什么版本,知名度稍微高一点的多人协作框架都会有这样的规定。然后就想到可以通过tag查询历年版本。

怎么查询呢?我们先看到官方库的首页,这里有显示当前分支是主分支的main,看到了吗?就在左上方。

在这里插入图片描述
点开他,就会发现列出了很多内容。你会看到其实有两个选项卡,一个表示当前的分支,一个表示当前的tag,或者说你想把他翻译为【标签】或者【版本号】也是可以的,因为大家都把tag当作版本号。

在这里插入图片描述

在这里肯定是选择Tags选项卡了。毕竟你也看到了,截图中展示的就是分支名称,这谁看得懂啊。直接切换Tags选项卡查看历史版本。

在这里插入图片描述

是不是一目了然?所以还是得强调一下规范的作用。如果他们要是在tag里面说一堆醉汉一样的胡话,那就彻底没办法了。

什么?你说项目保密?字段全用aaa表示?方便别人看不懂?那,祝你好运。

好了,剩下的就是一点点找了。

最终,我在这里发现了一个很大的改动,也就是在v7.2.0中的requirements.txt和v7.2.1中的requirements.txt里面是这么限定的:

名称v7.2.0中的版本v7.2.1中的版本
entrypoints不限不限
jupyter_core ≥ 4.9.2 \ge4.9.2 4.9.2 ≥ 4.9.2 \ge4.9.2 4.9.2
nest-asyncio ≥ 1.5.1 \ge1.5.1 1.5.1 ≥ 1.5.4 \ge1.5.4 1.5.4
python-dateutil ≥ 2.1 \ge2.1 2.1 ≥ 2.8 \ge2.8 2.8
pyzmq ≥ 17 \ge17 17 ≥ 22.3 \ge22.3 22.3
tornado ≥ 5.0 \ge5.0 5.0 ≥ 6.0 \ge6.0 6.0
traitlets不限不限

好了,发现问题。能够支持当前paddle2.0的最高版本也就只有jupyter-client的7.2.0的版本。

那就下载嘛。

pip install jupyter-client==7.2.0

虽然下载之后jupyter-client还是会下载较新的pyzmq,但是这个时候再次使用命令:

pip install pyzmq==18.1.1

这时将不会再报错。

你以为这就结束了?

还有个幺蛾子:protobuf版本不对应。

如果版本过于超前,将会报错,所以选择较低版本:

pip install protobuf==3.19.4

需要注意的是,两个等号前后不要有空格,否则会被认定为install命令的参数而出现各种各样奇奇怪怪的错误。

又好气又好笑的bug

安装好了protobuf之后,又开始报错:

NameError: name 'batch' is not defined

一开始我还以为是版本问题,结果发现已经有人踩坑了,还发了一个issue,当然最后还有一个回答:

装好了重启内核。—— rancheng commented on 3 Jul 2021

结果还真解决了。

当然也有没解决的情况,比如会报错:

libSM.so.6: cannot open shared object file: No such file or directory

如果不是内核没重启的问题就是linux本身没有库的问题,按照这篇博客给的方法安装就好了:

apt-get install -y libsm6 libxext6 libxrender-dev

你以为又双叒叕结束了?

飞桨不支持Ubuntu2204。参见这篇博客:PaddlePaddle 尚不支持 Ubuntu22.04 | 作者:zhqh100

如果你很不幸地使用了Ubuntu2204,这意味着你以前的所有踩坑全是白费的。

相当的绝望呢。

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ordinary_brony

代码滞销,救救码农

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值