草庐IT

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

ordinary_brony 2023-06-02 原文

文章目录

导读

估计不少人和我遇到了同样的问题,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,这意味着你以前的所有踩坑全是白费的。

相当的绝望呢。

有关jupyter和pyzmq之间的一些个奇葩坑的更多相关文章

  1. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  2. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  3. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  4. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  5. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  6. ruby - 找一些句子 - 2

    我想找到在某些文本中找到一些(让它是两个)句子的好方法。什么会更好-使用正则表达式或拆分方法?你的想法?应JeremyStein的要求-有一些例子示例:输入:ThefirstthingtodoistocreatetheCommentmodel.We’llcreatethisinthenormalway,butwithonesmalldifference.IfwewerejustcreatingcommentsforanArticlewe’dhaveanintegerfieldcalledarticle_idinthemodeltostoretheforeignkey,butinthis

  7. ruby - 无法理解 `puts{}.class` 和 `puts({}.class)` 之间的区别 - 2

    由于匿名block和散列block看起来大致相同。我正在玩它。我做了一些严肃的观察,如下所示:{}.class#=>Hash好的,这很酷。空block被视为Hash。print{}.class#=>NilClassputs{}.class#=>NilClass为什么上面的代码和NilClass一样,下面的代码又显示了Hash?puts({}.class)#Hash#=>nilprint({}.class)#Hash=>nil谁能帮我理解上面发生了什么?我完全不同意@Lindydancer的观点你如何解释下面几行:print{}.class#NilClassprint[].class#A

  8. ruby - 在模块/类之间共享全局记录器 - 2

    在许多ruby​​类之间共享记录器实例的最佳(正确)方法是什么?现在我只是将记录器创建为全局$logger=Logger.new变量,但我觉得有更好的方法可以在不使用全局变量的情况下执行此操作。如果我有以下内容:moduleFooclassAclassBclassC...classZend在所有类之间共享记录器实例的最佳方式是什么?我是以某种方式在Foo模块中声明/创建记录器还是只是使用全局$logger没问题? 最佳答案 在模块中添加常量:moduleFooLogger=Logger.newclassAclassBclassC..

  9. ruby - 在两个 ActiveRecord 类之间合并/复制属性的好方法? - 2

    之前有人问过这个问题,我发现了以下clip关于如何一次设置一个类对象的所有属性,但由于批量分配保护,这在Rails中是不可能的。(例如,您不能Object.attributes={})有没有一种很好的方法可以将一个类的属性合并到另一个类中?object1.attributes=object2.attributes.inject({}){|h,(k,v)|h[k]=vifObjectModel.column_names.include?(k);h}谢谢。 最佳答案 利用assign_attributes使用:without_prote

  10. ruby-on-rails - 2个用户之间的产品订单 - 2

    我有三个模型:User、Product、Offer以及这些模型之间的关系问题。场景:用户1发布了一个产品用户2可以向用户1发送报价,例如10美元用户1可以接受或拒绝提议我现在的问题是:用户、产品和报价之间的正确关系是什么?我如何处理那些“接受或拒绝”操作?是否有更好的解决方案?用户模型:classUser:productsend产品型号:classProduct:usersend提供模型:classOffer提前致谢:)编辑:我正在使用Rails3.2.8 最佳答案 警告:小小说来了第1部分:设置关联我建议阅读Railsguideo

随机推荐