岁月是把杀猪刀:杀死了脚本,杀死了节点......
有首名为《杀猪刀》歌曲有这样一段歌词:岁月是一把杀猪刀,黑了木耳、紫了葡萄、软了香蕉。好吧,仔细品味一下,貌似这歌不太健康?不过时间真的是把杀猪刀,会改变很多事情呢。
(图源 :pixabay)
昨晚在自己电脑上看自己以前写的一些脚本,突然想运行一下试试。
虚拟运行环境问题
拿了一个最简单的脚本测试了一下,结果给我一大堆错误:
文字版错误内容如下(附上文字版,方便Google等搜索引擎收录以及自己以后搜索):
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
讲真,这种错误我还是第一次遇到,查了一下百度,嗯,给我的结果也是云山雾罩。
那么只有自己去探究一下喽,首先查查我运行这个程序使用的python在哪里,以及是什么版本:
whereis python
显示结果为:
python: /home/xxxxxxx/venv/bin/python
看来调用的是我Python虚拟运行环境中的程序,嗯,这看起来很正常。这是对应目录下的部分文件,也很正常:
既然执行文件没问题,就去库里看看喽,结果一看,还真发现问题了:
简单来讲,就是一堆断掉的软链接:
而对比一下我当前好用的Python虚拟运行环境
可见其中Python可执行文件是指向系统的Python,同样,这些依赖库也没有单独复制到虚拟环境下,而是使用系统python相应的依赖库。
简单来讲,就是当年的Python虚拟环境过时啦,造成这种问题的原因我不清楚,可能是使用了不同的Virtualenv工具?也可能是使用了过时的配置参数?
不过感觉再去追究当时如何如何,已经没有太大的意义了,毕竟已经过了四年多了,时间是把杀猪刀,也把我曾经运行得好好的程序杀掉,是很正常的事情嘛。
至于解决起来,其实也很简单,不过就是Python虚拟运行环境的问题嘛,重新建一个就是喽。这次我用的又是virtualenv:
virtualenv --python /usr/bin/python3 .venv
总是搞不清楚创建python虚拟运行环境的几种方法之间的异同,不过我就是传说中的差不多先生,好用就好,何必纠结过多呢?
当然了,新建Python虚拟运行环境,意味着之前环境中安装的库啊之类的都没法用了。虽然我觉得可以通过从旧环境中复制相关内容到新环境,但是何不直接安装新的库呢,这样一切都是最新(最安全)的,多完美呀。
节点问题
做完这些工作后,再次运行一下我之前的脚本,额,还是有问题,发现脚本中用的是一个公链的本地节点,而这个节点我已经停止运行四年多了。
脚本中也有写其它节点,不过测试了一下,脚本中的其它非本地节点也都关闭了... 呜呜呜,岁月真的是把杀猪刀,不但杀掉了我的节点,还杀掉了一堆公共节点。
socket.gaierror: [Errno -2] Name or service not known
从出错信息上看,应该不光对应的节点光了,而是整个域名都没啦。去浏览器打开看一眼,果然如此:
这域名真的不错,如果不是它要价$ 79,995 USD,我都想买下来了。
费了九牛二虎之力,总算找到几个好用的公共节点,继续尝试,节点到是没问题了,又遇到了新问题。
time.clock() 问题
话说我的脚本中用了一些和时间有关的函数来度量脚本的执行时间,相关代码类似这个样子:
start = time.time()
cpu_start = time.clock()
process_start = time.process_time()
perf_start = time.perf_counter()
......
end = time.time()
cpu_end = time.clock()
process_end = time.process_time()
perf_end = time.perf_counter()
print("CPU Time:", cpu_end - cpu_start)
print("Proc Time:", process_end - process_start)
print("Exec Time:", end - start)
print("Perf Time:", perf_end - perf_start)
结果运行时报如下错误:
AttributeError: module 'time' has no attribute 'clock'
好在当年写相关脚本时,就记得time.clock()是有问题的,主要就是time.clock()在Linux下和Windows下行为不一致。所以在Python 3.8中,它被彻底移除啦。
既然都被移除了,咱就不用完了呗,从代码中移除相应语句,一切都OK了。嗯,四年多以前的脚本,总算可以跑起来啦。
当脚本跑起来之后,有些激动、有些感慨、有些迷惘。激动的是,又见到一些熟悉的内容,感慨的是如今时过境迁,杀猪刀杀掉的不止是脚本、节点、time.clock()还有币价和当年的激情啊。
至于让我迷惘的则是,脚本能跑,但是好多内容,我去看不懂了呢,要从头好好捋捋。还有就是要用来做点啥呢?
Leave 岁月是把杀猪刀:杀死了脚本,杀死了节点...... to:
Read more #cn posts
Best Posts From oflyhigh
We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.