19. 第三方库的管理和虚拟环境

Hi, 大家好。我是茶桁。

在我们之前的课程中,讲解了数据,函数,类,模块以及包。这些基本上已经构成了 Python 的全部了。

那么,我们在学习 Python 的包之后,有没有思考过,既然 Python 有内置模块,我们也可以自己写一些模块来使用,那一定有很多第三方写过相应的模块来供我们使用。那么,这些包该如何去找,找到以后如何使用和管理呢?今天,就让我们来看看这个问题。

第三方库的管理

现在很多编程语言都有第三方库的提供,比如Ruby, Node等。而 Python 的生态也是发展的最好的之一。Python 中比较牛逼的地方就是由大量的第三方库提供给你使用。生态的蓬勃发展也是 Python 广为流行的最大的原因之一。

Python 的第三方库的管理网站:https://pypi.org/

如何安装第三方库?

pip就是 Python 得包管理工具,解决了包直接的依赖关系,可以方便的管理第三方库(包)。类似于PHP中的Composer, 或者Nodejs中的npm, 又或者Mac中的Homebrew

我们可以使用pip install 包名(库名)来进行安装。而如果是有多个 Python 环境的情况下,可能需要使用pip3。比如说,我们要安装pymysql这个库:

1
pip install pymysql

在安装命令过程中,有的时候我们可能对版本会有一定的要求,并不是越新的版本越好。这个时候,我们也可以安装指定版本的包

1
pip install 包名==版本

现在包都已经安装到本地了,可是因为安装的内容太多,我们可能有的时候会忘记自己以前是否安装过这个包。为了避免重复再装一次,我们可以搜索一下看看:

1
pip show 包名

这样,这个包的所有信息就会打印出来供我们查看:

当然,我们也有类似于想要查看本地安装的所有包的需求:

1
pip list

这样,我们就可以把本地说安装的包名以及版本都列出来进行查看:

这些呢,就是我们在包管理经常用到的一些命令。

等等,大家在执行安装的时候,一定会遇到安装特别缓慢的情况。多数时候可能是因为我们所在的环境因为各种原因连接不上官方的源服务器。

不过别着急,我们可以切换到镜像源上,找一个速度快的来下载安装。

目前国内的安装源有以下几个可供选择:

  • 阿里云 http://mirrors.aliyun.com/pypi/simple/
  • 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
  • 豆瓣(douban) http://pypi.douban.com/simple/
  • 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
  • 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

修改源的方式也很简单,包括了「临时修改」和「永久修改」两种。

临时修改,顾名思义,就是我们有的时候临时需要切换到其他源上进行下载了。

我们可以使用pip的时候在后面加上-i参数,指定 pip 源:

1
pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple/ 

多数情况下,我还是习惯于将源永久修改为一个速度较快的镜像上,也懒得每次都输入长传的命令。那么永久修改的方式稍微复杂点,我们分系统来看:

在 Linux 中,我们找到pip.conf这个文件,一般来说,它的位置应该是~/.pip/pip.conf,如果没有的话,那就创建一个,然后写入如下内容:

1
2
3
4
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn

在 Windows 内原理也是一样的,不同的是路径和文件有所不同。

我们在user目录中创建一个pip目录,如:C:\Users\du\pip, 然后在 PIP 目录下新建一个pip.ini文件,然后写入内容:

1
2
3
4
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn

这样,我们在之后安装第三方库的时候就会发现,速度快多了。

虚拟环境

虚拟环境呢,就是在当前的系统环境中,去配置另外一个 Python 得运行环境。我们理论上是可以创建多个不同的虚拟环境的,Python 得虚拟环境相互独立,互相之间不会影响。

那么虚拟环境下呢,具有以下一些特点:

  • 虚拟环境中可以在没有权限的情况下安装新的库(Linux 系统中可能会出现的问题)
  • 不同的应用可以使用不同的库或不同的版本。
  • 虚拟环境中的库升级也不影响其它环境
  • 虚拟环境可以作为一个项目的专有环境。在需要部署时,一键导出项目的所需要的包

默认方式

Python 本身就支持创建和管理虚拟环境。可以使用以下方式进行创建:

1
python -m venv 虚拟环境名

创建完成后,我们可以使用下面的方式进入虚拟环境,激活虚拟环境

Linux

1
2
# 使用 source 命令去执行 v1/bin/目录下的 activate
localhost:code yc$ source v1/bin/activate

Windows

1
2
3
4
5
# Windows 系统需要进入 v1/Scripts/这个目录
cd v1/Scripts/
# 运行 activate.bat 文件
activate.bat
(v1) F:\code

在这之后,我们现在就处于某一个虚拟环境中了,可以执行安装等操作:

1
2
3
pip install pymysql

pip show pymysql

那么如果我的某一个环境被我给搞乱了,我也找不到原因,还不如重新安装来的快。这会儿我们可能就想要退出并删除这个虚拟环境:

如果想要退出虚拟环境,在 Linux 中,我们可以输入下面这个命令:

1
2
3
4
# 退出虚拟环境

# Linux
deactivate

那如果是 Windows 中呢就比较简单了,直接Ctrl+C就好了。

在退出之后,我们直接删除虚拟环境的文件夹,就搞定了。

以上是我们不想要当前虚拟环境的情况下,那也有一种可能是我们需要更换电脑等原因,但是我想带着我的环境一起迁移,这该怎么办?

这也好办,我们可以到处当前环境所有安装过的包:

1
2
3
4
5
6
7
8
9
10
11
# 查看所有安装的包
pip list
```
package version
------------------------
Numpy 1.3.1
........


# 导出所有包到文件
pip freeze > ./requirements.txt

然后在下一个环境中,我们直接执行安装文件内所有包就可以了:

1
pip install -r requirements.txt

Conda

虽然 Python 中已经有了包管理的方法,但是还是不得不说,有时候第三方提供的方案确实香。

目前,我现在都是使用conda(Andaconda)来管理我本地的虚拟环境。其使用也是非常的简单了,我们可以去其官网上(https://www.anaconda.com/)下载并安装对应自己系统的版本。

安装完成后,Conda 就会创建一个默认的base环境,我们之前一直使用的Jupyter Notebook也一并是安装在环境中的。

那么在 Conda 中,我们经常会用的命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装包
conda install 包名称

# 安全方式安装包
conda install -c conda-forge 包名称

# 创建环境
conda create --name 环境名 python=3.10 #最后是输入当前环境要用的 Python 版本

# 切换(激活)环境
conda activate 环境名

# 查看环境列表
conda info --env

# 删除某个环境
conda remove --name 环境名 --all

对比下来,conda真的是非常的方便。推荐大家使用。

那么,今天的课程就到这里结束了。我知道,今天的课程似乎显的特别的少。em....不是似乎,是确实。

原因在于这一部分必须拿出一个章节来介绍一下,否则大家平时在使用的过程中万一将自己的默认环境搞乱了,但是又不知道该怎么办,确实挺烦人的。所以我专门拿一节出来,将环境的问题好好的跟大家介绍下,顺便也是告诉大家,不管你做什么实验和操作,尽量新建一个环境来操作。这样,即便你把当前环境搞的乱七八糟无法恢复,删了就好了。

好,那我们这节课到这里也就结束了,咱们下节课讲讲如何处理异常。

作者

Hivan Du

发布于

2023-08-15

更新于

2024-01-16

许可协议

评论