Python 安装和依赖管理:Conda/Pip
Python 的依赖管理是一件麻烦的事。不光是我觉得,其他人也有这么说。 特别是当你要跨平台的时候,比如在 Mac 或者 Windows 上开发,却要在 Linux 上运行。 或者你家里有台 Mac,但是学校或者办公室有台 Windows。 反正就是不同的 Platform 或者不同的电脑让我非常头疼。
比如我办公是一个 Mac 或者 Windows,而且还要把写好的服务推向 Linux,回到家继续加班的话,又是一台另外的 Mac。 这可要把我整得头都秃了。因为 Python 的依赖环境如果不一致的话,同一份代码在不同的环境下,可能都跑不起来。
安装 Python¶
首先第一步,你的有一个 Python 在电脑里,才能拿着它来写代码,运行程序,然后才到了考虑依赖的事情。在之前的课程中, 我们避开了安装 Python 的步骤,因为你可以直接花个两天,先在我的在线执行环境学习,然后再学着安装 Python 和在本地编代码。
所以我在下面要给你介绍两种比较常用的安装 Python 方式。一种是直接从官网下载安装,一种是使用一个环境管理器 Conda 来安装。
直接在官网下载安装
Python 的官网是 python.org。点开它后,你会看到有一个 Download 的 tag(目前是长这样,不过之后可能会变位置)。
你可以直接点击下载最新的 Python 版本,或者是自己在最新版本旁边点击你的系统,根据你的系统来下载不同版本的 Python。 下载好之后,你就一路点击下一步,直到完成就好了。
如果是 Windows 版本的同学,你需要注意一下,最好是要添加这个 Add Python x.x to PATH
,把它勾选添加到系统的 PATH
,不然你之后在命令行安装 Python 依赖的时候会很痛苦。
如果你忘记添加了,你可以在开始菜单的搜索栏里搜索环境变量
,添加一下 Python 的执行程序到 PATH 里去。这个我不细说了,你用 Windows Python 加 PATH
这个关键词搜索一下,一大堆教程。
好了,现在请打开你的 Terminal(Mac)或者 CMD(Windows),不会打开的,也请你用 Terminal/CMD 做关键词搜索一下。在打开后的窗口中输入:
python
# 或者
python3
看看它是不是给你返回了类似这样的结果,跳转到了命令行的 Python 中了,如果不是下面这种结果,就说明要不就是你 PATH 没加好,要不就是没安装成功。
Python 3.8.10 (default, May 19 2021, 11:01:55)
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
注意,请你检查一下,这里的 Python x.x.x 版本是不是你安装的版本,如果不是,那就说明你的电脑里面存在多个 Python 版本,请你用 管理多个 Python 版本
作为关键词搜索一下。 或者我们下面会将用 conda 来管理多个 Python 版本/环境的方法。
用 Conda 安装并管理
conda 是 Python 的一个管理器,它可以管理多个版本的 Python,也可以根据不同项目来管理不同的 Python 依赖。实现项目与项目之间的运行环境隔离。我来举个例子。 我有个项目 A 用了 Python3.6 + Tensorflow1.8 版本的依赖,项目 B 用了 Python3.9+Tensorflow2.5 的依赖。用过 Tensorflow 的同学都知道, 版本升级了之后,代码几乎完全不同了,也不兼容了,所以版本和版本之间,项目和项目之间最好还是做成隔离的比较好。而 Conda 就最擅长管理这些事情。
在说 conda 之前,还有一个 venv 的方法也可以做到这个隔离环境的事情,但是 venv 没有 conda 强大,我这个教程就不介绍 venv 了,如果你很有兴趣的话,自己搜一搜吧~
在这里,我先将 conda 的安装,后面我再来介绍怎么安装依赖。
我会推荐你两种安装 conda 的方式:
- 一种是直接安装一个裸 miniconda,这也是我最喜欢的方式,因为安装包小而美,轻便,没有绑定其他东西。
- 另一种是安装 anaconda,这个处理最基础的 conda,还包了很多其他的东西,比如自带科学计算的库全家桶和 jupyter notebook。如果你内存比较大,想省心,你就直接安装 anaconda 吧。
这两种方式,在官网上都提供了命令行安装模式和图形化安装模式依据你喜欢的方式安装吧。因为我比较熟悉命令行,所以我一般都用命令行来安装。
- 命令行:你要去找出现
Command Line Installer
,bash (Mac)
这样词的下载链接。 - 图形化:你要找
Graphical Installer
,pkg (Mac)
这样词的下载链接。
同时,请注意一下,你是多少位系统(32/64)。下载好后,基本上都是一路下一步就可以安装好了。Anaconda 我不太记得了,应该不用管 PATH 这回事,他会自动帮你处理。 MiniConda 也会自动帮你处理。
安装好之后,请打开你的 Terminal(Mac)或者 CMD(Windows),不会打开的,也请你用 Terminal/CMD 做关键词搜索一下。在打开后的窗口中输入:
conda -V
# 会出现类似下面这样的回复
conda 4.9.2
如果没有的话,请检查 conda 是否有被加入到 PATH 中(关键词:conda path),或者安装是否成功。
依赖是什么¶
我们在运行一个 Python 程序的时候,你很有可能需要依赖于其他人写的代码,或者仓库,而这就是 Python 的依赖。 比如你在学习机器学习,你很有可能就要依赖于下面这些库来写代码:
- tensorflow
- pytorch
- sklearn
- numpy
学会使用并安装别人写好的架子,比起自己从头造轮子还好很多。
pip¶
不管你是通过 Python 官网的下载包安装好的 Python,还是用 conda 安装好的。第一步,都是为你的项目添加依赖库。虽然 conda 可以使用 conda install
的指令来安装依赖, 但是我还是建议使用 pip 来安装依赖,我后面会细讲。那 pip 是什么呢?
Pip 是一个好东西,他是 Python 的库管理工具。咦,这 Python 怎么有这么多和库有关的东西,一会儿 conda 一会儿 pip 的。他们是什么关系呢? 我是这样认为的。
- pip 是最底层最原始的 Python 库管理工具,安装一个 Python 就自带一个 pip,每个版本的 Python 都有自己私有的 pip。你可以想象成 pip 是 Python 的跟班。
- conda 是在 pip/python 之上,想要隔离 pip 和 Python 环境的组件,所以是用 conda 来管理不同的 python 版本的。
所以后面我提到的用 pip 安装任何依赖,不管你有没有用 conda 管理,是都可以用 pip 安装,pip 安装都是兼容的,我再建议一遍,都用 pip 安装吧。 假如你要开始安装依赖了,请打开你的 Terminal(Mac)或者 CMD(Windows),我来介绍 pip 的花式安装法,下面每种方式都是可以的:
pip install numpy # 安装最新的 numpy
pip install numpy matplotlib requests # 一次性安装多个依赖
pip install numpy==1.19.4 # 强制安装特定版本的库
你的注意一下,如果不是安装了 conda,用 conda 的 pip 来安装,你有可能需要把上面的 pip
改成 pip3
,因为,在一般的 Python 中,pip
对应的是 Python2+ 的版本,pip3
对应的是 Python3+ 的版本。 一定要留意一下,自己装去了哪个版本的 Python。
pip3 install numpy
好,现在你很可能会遇到一个问题,我的安装太慢了,等老半天都没下载完,怎么办?其实原因是因为 pip 安装的时候,它跑去国外的官网下载了,你懂的,有座高高的墙, 速度快不到哪去。怎么加速下载呢?我们可以使用国内的 pip 源来安装。
pip install -i https://mirrors.cloud.tencent.com/pypi/simple numpy
加上 -i
参数,然后带上一个国内源的网址就好,上面带的是腾讯源。我们还有很多其他源可以选
源名 | 源地址 |
---|---|
腾讯源 | https://mirrors.cloud.tencent.com/pypi/simple |
阿里源 | http://mirrors.aliyun.com/pypi/simple/ |
豆瓣源 | http://pypi.douban.com/simple/ |
清华源 | https://pypi.tuna.tsinghua.edu.cn/simple/ |
不过你有没有觉得,每次都打一个 -i
都好麻烦呀,有没有偷懒的方法? 如果你是 MacOS,你要在 Terminal 里输入下面指令。
mkdir ~/.pip
cat << EOF > ~/.pip/pip.conf
[global]
index-url = https://mirrors.cloud.tencent.com/pypi/simple
trusted-host = mirrors.cloud.tencent.com
EOF
如果你是 Windows,请在你的 username (C:\User\你的名字\pip
) 目录下创建一个 pip.ini
文件,然后在里面写上:
[global]
index-url = https://mirrors.cloud.tencent.com/pypi/simple
trusted-host = mirrors.cloud.tencent.com
保存完这些东西以后,你就可以体验快速下载安装依赖了。
如果你要删除库,你可以用下面的指令:
pip uninstall numpy
conda 分项目管理¶
conda 比普通的 pip 要更进一步,它可以分项目来管理依赖和 Python 版本。比如我有很多项目,里面的 Python 版本和依赖都不相同,我更愿意用 conda 来为这些项目单独管理一个 Python 和隔离他们的依赖。
首先,你需要创建一个 conda 环境 env,定义这个环境的名字和 Python 版本。
conda create --name mofanpy python=3.8
然后手动切换到这个 mofanpy
的环境中,不然你就会一直待在一个叫 base
的基础环境中。
conda env list # 可以看到当前有哪些环节
# conda environments:
#
#base * /Users/xxx/miniconda3
#mofanpy /Users/xxx/miniconda3/envs/mofanpy
conda activate mofanpy # 切换环境
pip install xxxx # 在 mofanpy 安装依赖
然后在你新建的环境中,直接用 pip 安装你想要安装的库吧,现在所有用 pip 安装的库,都会隔离开,单独存放在 mofanpy
这个独立环境中。和 base
或者其他环境都不影响。 当然如果你懂 conda install xxx
你也可以使用这个指令来安装依赖,这种方法同样也是隔离的安装方式。
迁移依赖¶
这个项目你要在不同机器上执行;我上传了 github,别人怎么知道我有哪些依赖;换电脑了,不想手动一个一个重新安装对应的依赖,这些情况下,我怎么又快又好的搞定所有依赖的事情? 答案很简单,还是得靠 pip。你有没有发现,在我 Github 上有很多项目中,都会放 requirements.txt
这个文件。 它就是一个最基础的 pip 依赖列表。我们可以通过下面的指令来生成。
pip freeze > requirements.txt
他会显示这个 Python 版本 pip 中所有安装过的依赖。如果你是用 conda 分项目来建 Python 的依赖环境的话,那就是这个 conda env 中的所有 pip 依赖。
导出来了所有的 requirements 依赖,我该怎么按照这个文件一次性在一台新电脑上安装呢? 也挺简单的,我只需要把这个 requirements.txt
文件放到新电脑中,或者把我写的整个代码项目一起打包发去新地方,在新地方的目录下执行下面指令,直接从 requirements.txt
里面读取依赖版本去安装。
pip install -r requirements.txt
大功告成,凌晨 3 点了,写得太晚了,可以去睡觉了。
总结¶
整个从零开始,从安装 Python,到管理 Python 依赖的步骤,都统统过了一遍。还告诉了你很多小技巧,小窍门。这都是我在日常生活中,会遇到的一些问题,和解决它的方法。你当然可能有你自己的风格, 但是技多不压身,多学多看看。下次我们来看看莫烦都喜欢用哪些编辑器,加快你写代码的速度吧~