2019年6月7日星期五

Python 为什么我倾向于conda而不是pip,以及管理虚拟环境为什么用conda

为什么 conda 而不是 pip

原因一,pip 安装包经常编译失败:

pip 安装需要编译的包时,经常会失败。这类包例如 bottleneck、Twisted。而 conda 则能正确安装这些需要编译的包。

原因二,conda 能自动创建最佳环境:

conda 安装包时能自动创建最佳的环境。典型的例子是安装 numpy 和 pandas,conda 安装时会自动安装 mkl,mkl 是英特尔用来加速科学运算的一系列包,可以让 numpy 运行地更快。pip 安装 numpy 和 pandas 时,不会自动安装 mkl。

当然,自动安装 mkl 有好有坏,坏处可能是你只想安装 numpy 和 pandas 本身,而对 mkl 带来的额外硬盘占用很讨厌。不过,就一般用户而言,更应该关心的是自己的研究工作本身,而不是费时费力地去自行打磨 python 环境。用 conda 显然能比用 pip 省时省力。

为什么管理虚拟环境用 conda,而不是其他例如 venv

上述原因也是我在 python 虚拟工具的选择中,使用 conda 而不是其他工具(例如 python 3.7 官方推荐的 venv)的原因所在,用譬如 venv 创建虚拟环境,我只能 pip 安装,而 pip 安装时我面临很多包无法正确编译、安装 numpy 时不会自动安装 mkl 等问题,而用 conda 来管理虚拟环境,上述问题都不复存在。

IPv6 的 fe80开头的地址

fe80开头的 ipv6 地址不是公网地址,没人给你分ip,自动协商的地址,通常无法用于上网。 现在各大运营商用的ipv6: 电信是240e开头的(240e::/20) 移动是2409开头的(2409:8000::/20) 联通是2408开头的(2408:8000::/20)