有首名为《杀猪刀》歌曲有这样一段歌词:岁月是一把杀猪刀,黑了木耳、紫了葡萄、软了香蕉。好吧,仔细品味一下,貌似这歌不太健康?不过时间真的是把杀猪刀,会改变很多事情呢。
(图源 :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()
还有币价和当年的激情啊。
至于让我迷惘的则是,脚本能跑,但是好多内容,我去看不懂了呢,要从头好好捋捋。还有就是要用来做点啥呢?