我也来水一水文章,讲讲我在用腾讯云的centos7镜像部署的服务器上能痛快的执行“fuck”命令之前到底经历了多少“磨难”,也算是给自己和别人一个参考吧
“fuck”命令实际上是一个python模块“thefuck”,具体我也不在这多废话,常规的安装教程网上也是一搜一大把,这里不做赘述,我主要讲一讲我踩过的坑
首先是python版本,centos7默认的python版本是2.x,而目前thefuck模块所需要的python是python3.x,所以得先安装python3,然后再通过安装模块的方式安装thefuck,这看起来没啥难的,但腾讯云的镜像我猜可能是由于历史原因,里面埋了一些坑
1,“mirrors.tencentyun.com”
在我这几天折腾服务器的时候,这个奇怪的域名是我踩过最多的坑,我猜这个域名可能是腾讯云以前的域名,不过目前无法求证这个是腾讯云内网访问的域名。它之所以会称为一个坑,是因为腾讯云的centos镜像里面很多地方的“源”都是这个,yum的源和pip的源都是这个,yum的源的问题我通过查阅资料改掉了,这问题不大,但头疼的是pip的源
21.8.14 1:54pm 更新:腾讯云的服务器建议不要更改dns,默认的dns是腾讯云的内网dns,腾讯云的镜像里面有很多地方都是用的腾讯云的内网域名,此处参考资料:
1、云服务器 NTP 服务相关 – 常见问题 – 文档中心 – 腾讯云#若改变内网 DNS,会有哪些具体影响?,官方文档,更新于21年6月
2、云服务器 内网服务 – 产品简介 – 文档中心 – 腾讯云#内网dns,官方文档,更新于20年6月
21.8.13 10:18pm 更新:经查阅资料,“mirrors.tencentyun.com”为“腾讯软件源”镜像的内网访问域名,它的公网访问域名为“mirrors.cloud.tencent.com”和“mirrors.tencent.com”,这两个公网域名是可以用任意dns解析并访问的,而“mirrors.tencentyun.com”是只能通过腾讯云的内网dns才能解析并访问的。此处参考资料:
1、《云服务器镜像问题(”Couldn’t resolve host ‘mirrors.tencentyun.com’) – JunQiu – 博客园》,但由于年代久远(17年的文章),所以仅供参考,有效性已无法保证
2、《云服务器 腾讯云软件源加速软件包下载和更新 – 运维指南 – 文档中心 – 腾讯云》,官方文档,更新于21年1月
不知道藏在哪的“Tencentyun”
直接安装thefuck,pip会自动安装所需的其它模块,这本是好事,但头疼的是这个不知道藏身在何处的“Tencentyun”,安装网上的方法更改pip3的源,结果都没用,我只能从它的日志里面找到它需要但又下载失败的那个模块,然后通过pip3 install
命令去手动安装,而且还得注意安装顺序,不然“Tencentyun”就又会出来找你麻烦
如果你问我是怎么知道的,那我就用图片来回答你
由腾讯软件源的内网访问地址带来的坑到这里暂时算是告一段落了,接下来这个坑应该是centos7“通用”的坑
2,“python-dev”
因为缺少python-dev而导致的文件缺失
在图中,从报错信息来看,似乎只是缺少一个文件而已,其实这又是一个坑——缺少python-dev这个程序包。不过可别以为缺啥就直接yum install
啥就行了,如果你真如此天真,那么等待你的只有“找不到这个包”的报错。在centos里面它不叫这个,叫python-devel
,但这在centos7里面又是另一个坑,你直接安装python-devel安装的是python2.x的,但安装thefuck的是python3.x,所以得安装python36-devel
,在安装完成之后再安装psutil
,然后安装pytest-runner
,接着是pyte
,在这些都安装完成之后再来安装thefuck
,装完之后fuck几下就可以正常使用了
所以说,在坑爹的腾讯云centos7上安装thefuck
的全部命令是:
#此处默认你已安装python3,能正常执行pip3命令
yum install python36-devel
#逐个安装thefuck所需的依赖
pip3 install six
pip3 install psutil
pip3 install pytest-runner
pip3 install pyte
pip3 install thefuck
在安装完这些之后,执行fuck会提示让你配置环境,这个时候再执行一次“fuck”,然后再执行source ~/.bashrc
就完成了fuck的安装,可以“愉快的”在服务器上fuck了
顺带说一句,腾讯云的centos8可以直接pip3 install thefuck
,不用手动去一个个安装那些奇怪的依赖模块,再就是没事别乱改服务器的dns,尤其是当服务器的默认dns是内网dns的时候,判断dns是不是内网dns,在云下ping一下就知道了