最近两天cnbuddy的alpha版终于上线了。之前忙于各种调试,没有抽出时间写帖子。现在终于可以喘口气,记录一下cnbuddy的成长日志了。
第一次接触steem api的时候没有任何头绪,就随便选了个python版拿来用了——也是因为之前一直在用python,所以估计会比较容易上手。无奈安装的过程一波三折,才导致了后来向node.js的迁移。总的来说,所谓工欲善其事,必先利其器,开发环境准备好了,才能开始码字的么。
Python版的steem api,在windows下我无论如何都无法成功安装pycrypto和scrypt两个包。到网上查了查,说是跟SSL和加密有关系,这我忍了。还有说依赖组件是VS2010写的、用VS2015不能成功编译云云。什么玩意~~索性废了瘟到死吧。本人手边没有苹果啃,所以选了Linux,后来到实验室里搞了台iMac配置了一下,发现这里也能顺利安装——万恶的瘟实啊。哪位大神懂得解决方案的话,请不吝赐教啊。
Windows还是要的,所以我就搞起了win 10新版本里的linux子系统(顺便哆罗嗦一句17年的秋季更新里这一功能已经是正式版了,之前还是beta版)。感兴趣的同学跟着我做,还能图形界面哦——开始菜单-设置-更新-左侧“开发者选项”-中间“开发人员模式”-确定后重启-桌面按Win+X-程序与功能-左侧“Windows功能”-下拉到最后“Linux子系统”。名词是随便翻译的,凑合看就好,因为我用了英文系统。这一串下来,我们就完成了 开发steem小机器人 之前第0步 配置开发环境 之前的第-1步 安装linux系统 之前的第-2步 启用linux子系统 的折腾了。
下一步:打开命令行,输入lxrun /install
,或者直接bash,windows就开始下载安装ubuntu了(注意我之前一直说的是linux,现在变成了ubuntu,这是因为windows支持的linux子系统不只是ubuntu,我们还可以换成debian、suse等等等等的啦。你要是还没晕,那就可以跟着苦逼程序员继续苦逼程序员的苦逼程序员之旅了(⊙o⊙))。哪天你玩腻了linux子系统(怎么又成了linux?!),输入lxrun /uninstall /full
就可以彻底删除它,或者只输入lxrun /uninstall
卸载,然后到%USERPROFILE%\AppData\Local\lxss
找你的数据文件。不要认为往这个位置Ctrl-V文件就可以在子系统里使用,这里面有文件权限的问题,导致子系统里不会同步文件的修改。另外这个子系统只是个最小安装版,而且它与宿主windows共享资源。比如两者共用同一IP地址和端口号,所以如果在两个系统之一里面启动了web服务的话,在另一个系统下的浏览器中可以直接访问该服务。有用Django、Ruby on Rails或者Express开发过网站的朋友都明白的——为什么是这三个?因为我只用过这三个……
没完没了的再下一步(天地良心,上一步只有个lxrun /install
是干货),使用图形界面。百度一下VcXsrv在SourceForge里的下载链接,当一个到windows里安装上,记得中间选上“添加XLaunch快捷方式”,其它一路默认,然后启动,中间有Display number时写负一的阿拉伯数字翻译(what the … ?),表示自动选择的意思。再到ubuntu里输入一句命令,echo "export DISPLAY=:0.0" >> ~/.bashrc
,重启——关闭所有的ubuntu窗口,windows就把子系统关了,然后再打开。安装个firefox,然后在bash窗口(就是ubuntu的命令行)里输入firefox启动,怎么样?火狐的窗口就出现在windows的任务栏里了。注意此处有bug:比如你启动了gedit,它的窗口不能最大化,也不要尝试拖动边框修改尺寸。慢着,你已经去试了?
好吧,这么多字码,你已经看困了,其实我也是……现在安装steem怎么现在才开始我的神啊。virtualenv,用过的都说好。Steem官方python叫steem-python(这不废话么),安装时要求python版本在3.6以上——这是它10月11号更新的0.18.103版里的新要求,之前一版都只是要python 3.5。先来段代码,然后再来段唠叨:
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install -y build-essential python3.6 python3-pip libssl-dev libffi-dev mysql-server mysql-client
sudo pip3 install -U pip vitualenv
virtualenv -p python3.6 temp && source temp/bin/activate
pip install steem
deactivate && rm -rf temp
sudo pip3 install steem
virtualenv -p python3 --system-site-packages python3
source python3/bin/activate
pip install piston-lib natsort mysql-connector-python-rf apscheduler PyMongo SQLAlchemy
deactivate
我们要安装3.6版的python,前两句半就都是干这个的。
第三句中间,libssl-dev libffi-dev,这就是与SSL加密相关的库,在windows里我没解决的就是它们。
第三句后面,MySQL,怎么能没有这个?!还有比这更好用的数据库么?!有,所以移植到node.js里面就换mongdoDB了嘛——此处打脸无穷下……
第四句往后都是在折腾往virtualenv里安steem。不用虚拟环境也行,你会发现安装steem时会有setuptools的错误。怎么会?Python里带了setuptools啊?让我来告诉你:还是入坑virtualenv吧……因为我也没解决得了。有说法是要卸载某某组件后强制安装,结果我没试验成功。
先安个python 3.6版叫temp的虚拟环境来安装steem。为什么叫temp,因为temp中文的意思叫卸磨杀驴(⊙o⊙)。Steem要求python版本在3.6以上,但是你在3.6里pip install -U steem是不会成功嘀muahaha~~,即便第三句中间那两个库安装成功了,pycrypto和scrypt还是安不上——等我一下我去拿把刀砍了谁家的那个小谁……
杀完了驴,日子还是得过。现在在系统全局下安装steem。盯住bash输出:这个包下载完了以后就会卡住,大概有个一分钟,然后你就会惊奇地发现,它在全局下安装成功了!这python不是3.5么?!等等,我还能再砍几刀……
对于我们大virtualenv党来说,全局怎么能接受得了。创建个python 3.6的虚拟环境并导入全局安装的包,这时运行个python -c "from steem import Steem"
看,是不是心凉了半截?让我来悄悄提醒你:看倒三行,解决方案就是用回python 3.5。我刀呢?谁把我刀拿走了……
这就完了么?没有……用了一段时间后我发现,用这个steem官方python库查询一下贴子还好,但想成功点赞办不到(至于忘记用posting key进行操作这种错误我还是不会犯的)……不知大神们谁有好的解决办法……临时方案是使用piston代替官方库,即倒二句里的第一个库。
简单介绍一下后续的几个库:natsort提供按照自然方式排序的算法,比如“zxu3@ualbertca”能够排在“zxu10@ualberta.ca”前面;mysql-connector-python-rf是python的MySQL驱动,有它才能在python代码中操作MySQL数据库;apscheduler实现多线程方法;PyMongo和SQLAlchemy是apscheduler的依赖库。
总之,至此终于能够愉(ku)快(bi)地耕码了。趁着这股子热情,赶紧洗洗睡吧(o)/。
感谢大家百忙之中阅读这篇水文。抛砖引玉,并且希望能够给有兴趣写写程序的朋友们一点帮助,从而少走一些我所经历的弯路。同时欢迎大神们指点迷津,让我与cnbuddy同时成长!谢谢!
@xuzhen 是公众帐号机器人 @cnbuddy 的开发者。感谢您的宝贵时间,如果喜欢我的作品,欢迎upvote, follow, and resteem @xuzhen.
Thanks for your time. If you like my posts, welcome to upvote, follow, and resteem @xuzhen.