前两天收到公司邮件, 说在我的电脑上发现了 anaconda 的进程, 商业软件需要付费, 为了软件合规, 让我卸载掉. 我就借这个机会写个简单的教程.
Anaconda 是一个 Python 的发行版 , 主要集中在科学计算的用途上, 主要有三点优势:
打包了很多科学计算的常用库, 比如 numpy
开发了 conda 这个环境管理工具, 可以很方便地创建虚拟环境, 管理多个 Python 版本, 同时安装 conda 维护的库
维护了很多科学计算相关的库, 而且都是编译好的二进制库, 相比于 pip 的库, 有时候更加方便, 比如 conda 会帮你把很多 c 语言的库编译好直接装, 很省事
我上网搜了一下, Anaconda 确实变更了他们的授权政策, 之前个人版可以用作商业用途, 现在不行了. 大规模商业公司的用户必须得缴费, 小规模的商业用途仍然可以使用个人版 (200 人以下).
我估摸着这个公司其实查的也没有那么严, 属于睁一只眼闭一只眼, 甚至是睁一只眼闭九只眼的状态, 但是公司为了完全合规还是让我们卸载掉了这个软件.
(话说为什么不能出钱给我们买?)
其实 Anaconda 倒不是因为软件收费, 他收费的主要对象是 conda 包的在线服务, 也就是你从他们的服务器上下载库的话收费, 单单使用 conda 这个软件并不收费.
然而, 我用 conda 的场景偏偏就需要从他们的服务器上下载包, 因为我主要就是管理多个 python 版本, 这个是需要下载二进制文件的.
所以, 虽然但是, 我还是在不舍中卸载了, 然后开始寻找替代方案.
结论是:
如果只需要使用一个版本的 Python, 但是需要多个虚拟环境, 用 venv
如果需要用到多个版本的 Python 和虚拟环境, 并且可以方便来回切换, 用 pyenv
Python 中的虚拟环境是一个很有用的功能, 可以建立多个互不干扰的空间, 每个空间中安装的包都是相互独立的. 之所以有这个需求, 是因为不同的软件依赖的包的版本是不一样的.
比如, 你有一套源代码依赖 TensorFlow 1.0 和 python3.5, 然后你又下载了别人的源代码, 依赖 TensorFlow 2.0 和 python3.6, 如果没有虚拟环境就很麻烦, 因为 Python 不能安装不同版本的库到同一个环境中. 但是你可以创建两个不同的 Python 环境, 这个时候就能完美运行两套代码, 互不干涉了.
下面稍微写一下 conda pyenv venv 的基本使用教程.
conda
用 conda 创建虚拟环境的命令如下
conda create -n new_env python=3.8 numpy
其中 - n new_env 的意思是指定新环境的名字, 这里叫 new_env,python=3.8 是指定 python 的版本, numpy 是指创建环境的时候你想安装的包, 可以写不止一个, 也可以不写, 等到创建完成了再安装.
创建完成之后, 你可以通过 conda activate 来激活某个环境
conda activate new_env
conda 的环境默认都是安装在 anaconda 的根目录下面, 比如我的 anaconda 安装在 / home/user/anaconda 下, 那么刚刚的环境就在 home/user/anaconda/envs/new_env 中
conda 的优势在于, 可以选择 python 版本, 而且不管是不同版本的 Python 解释器, 还是对应的包, 他提供都是编译好的二进制文件, 下载下来就可以直接用, 不用自己编译. 用 pyenv 也能管理多个版本, 但是需要自己编译, 虽然自己编译更自由, 但是也需要更多技巧.
conda 的缺点是, 依赖计算很慢, 所以安装会更久, 而且网络对国内用户不太友好.
venv
venv 的用法很简单
python3 -m venv my-env
这样就创建完成了一个新虚拟环境, 叫 my-env, 跟 conda 不同的是, 这个 my-env 是放在你运行这条命令的目录下面.
创建完成之后, 还需要激活, 运行下面的命令激活
source my-env/bin/activate
venv 的局限性在于, 只能用当前的 Python 版本
pyenv
pyenv 可以用来管理多个 python 环境, 用起来比 conda 稍微复杂一点点.
麻烦在哪呢? 它需要下载 Python 的源代码自己编译, 而 conda 都是下载好的二进制, 可以直接用. 我用 pyenv 安装 python3.6 的时候就遇到了编译错误, 然后设置了 build flag 才解决.
安装某个版本: pyenv install 3.6.15
设置默认版本: pyenv global 3.6.15
装完之后就能再配合 venv 创建虚拟环境了.
pyenv 其实自带了一个 virtualenv 命令, 类似于 conda, 可以在创建虚拟环境的时候指定版本, 比如
pyenv virtualenv 3.6.15 new_env
但是需要你先安装对应版本的 python.
以上基本上就涵盖了 Python 创建和使用虚拟环境的几种方法.
来源: http://virtual.51cto.com/art/202110/687777.htm