1、服务器模型奇妙出现了pip安装任何包、换任何源都连接超时的问题,让人焦头烂额。起初怀疑是服务器访问不了外网,但是ping baidu.com非常正常。然后ping 清华源,豆瓣源等等,发现都ping不通,只有百度能ping通。发现ping其他pip源时返回的提示信息里面的ip地址是ipv6格式的,就很奇怪。
后来上网查发现大多数网站都没有一个稳定使用的ipv6地址,如果以v6的形式去通信,肯定有问题(个人理解)。但是ping百度时默认的是ipv4的地址,很奇怪不知道为什么。于是我怀疑是服务器在访问其他网址时一直用的v6的地址,造成通信不畅。起初怀疑是dns解析错了,但是我拿另外一台正常服务器的网络配置(dns地址等)完全配置给有问题的机器,发现还是不行。即使ip只有最后一位数字不同,dns完全相同,代理地址(学校)完全相同,pip源完全相同,就是不行。
然后我考虑是否能调整v4服务和v6服务的优先级,这个一搜就有,按照教程把v4的优先级提前,结果发现还是不行。然后索性把v6服务完全禁掉,这个随便一搜也有教程,只留v4的服务,没想到,真的成功了。能够ping通除了百度其他的网址,pip安装也似乎正常了。不过似乎v4
和v6服务同时开启时,其中一项网络不通会自动启用另一项,但是之前真的不知道为什么完全不行。
pip能正常安装后,我又重新分别测试了恢复默认的v6网络优先级,和重新启用ipv6服务,结果现在网络也依然是正常的,至今不知道之前网络极端不正常的最关键因素是什么。
2、关于pip换源的问题,在解决上个问题的过程中,也看了很多pip换源的问题,发现有很多种设置。最全面的一个解释是这条博客
三个参数global,site, user,分别代表的具体含义文中也给出了解释:
具体的优先级我没有考证,但这条命令很清晰地列出了所有可以指定pip源的文件以及相应的位置,如果想进行修改非常容易。
3、关于很多时候在虚拟环境中pip默认安装不到当前虚拟环境的问题。
这个问题网上回答超级多,问题很常见,但是大部分回答都没说到点子上,只是治标不治本的一些方法,这儿有个回答说的非常好
总结一下,应该就是不管你当前的路径如何,又是在哪个环境中,pip install xxx命令执行时,其所安装的包总是对应于当前pip版本的。我的理解中,pip版本是对应于python解释器的。
4、最后一个小坑,就是可能有时候发现我指定了一个新的python解释器创建了一个新环境,但是激活环境后pip 安装的包依旧不在我的虚拟环境目录里面。
这篇文章大概率会解答这个问题
以前我为了图省事,把自己账号的~/.bashrc文件中添加了 账号一登录就conda activate xxxx(我自己常用的环境)的命令,这样就不用再自己手动激活。但是如上面文章所说,这样其实已经嵌套了好几层了。但是无论来回切换嵌套多少层,pip的版本总是对应于最初激活的那个base环境,所以最好的方法就是取消账号登录激活base环境的做法,然后自己手动选择初始激活哪个环境,该终端对应的即为该环境的python解释器对应的那个pip版本,默认的安装地址也即python解释器的相应位置。
另一篇关于修改默认激活环境的文章