pip相关用法

1. pip 常见命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 查看 pip3 版本
pip3 --version

# 查看帮助信息
pip3 --help

# 查找软件包
pip3 search <package_name>

# 查看已经安装的软件包
pip3 list
# 显示软件包当前版本以及最新版本
pip3 list --outdated --format columns

# 显示某个软件包的信息
pip3 show <package_name>

# 导出已经安装的软件包列表
pip3 freeze > requirements.txt # txt 文件的命名随意,一般命名为 requierements.txt
# 接着想要在另外一台机器上或者另外一个环境下面安装
pip3 install -r requirements.txt

# 安装软件
pip3 install <package_name>
# 安装特定版本的软件包
pip3 install requests==2.6.0
# 升级某个特定软件包
pip3 install upgrade <package_name>
# 临时更换安装源
pip3 install -i <URL> <package_name>
# e.g., pip install -i http://mirrors.aliyun.com/pypi/simple/ numpy

# 卸载软件包
pip3 uninstall <package_name>

完整的文档地址:https://pip.pypa.io/en/stable/

2. pip 如何指定某个安装源

正常情况下,比如需要安装 numpy,用的命令是:

1
pip install numpy

如果需要指定某个安装源的话,比方说阿里云的源,可以使用 -i 参数:

1
pip install -i  http://mirrors.aliyun.com/pypi/simple/ numpy

国内的源还有,具体参考 pip 国内源

  1. 豆瓣源:http://pypi.douban.com/simple/
  2. 清华源:https://pypi.tuna.tsinghua.edu.cn/simple/
  3. 科大源:http://pypi.mirrors.ustc.edu.cn/simple/
  4. 阿里源:http://mirrors.aliyun.com/pypi/simple/

上面的 -i 参数方法只能临时修改安装源,下次如果不跟这个参数,还是会从海外的站点下载安装包。

那有没有一劳永逸的方法呢?当然是有的

Linux 下:编辑 ~/.pip/pip.conf 文件(如果没有该文件,手动创建一个),比方说需要修改成科大源,可以这样:

1
2
3
4
[global]
index-url = http://pypi.mirrors.ustc.edu.cn/simple/
[install]
trusted-host = pypi.mirrors.ustc.edu.cn

上面的 trusted-host 的目的是为了防止在安装包时,提示安装源不受信任,避免不必要的麻烦。

Windows 下:在 C:/Users/tanjuntao/ 目录下,新建一个 pip 目录。接着切换到 pip 目录下,新建一个 pip.ini 文件,填入下面内容即可:

1
2
3
4
[global]
index-url = http://pypi.mirrors.ustc.edu.cn/simple/
[install]
trusted-host = pypi.mirrors.ustc.edu.cn

如果需要换成清华源,只需要将上面的地址改成清华源的地址即可,其它不变。

3. 如何使用某个 python 版本对应的 pip 来安装第三方包

这里以安装虚拟环境第三方包 virtualenv 为例,同时介绍如何用指定版本的 python 来安装第三方包,同时如何建立 python 虚拟环境。

首先,Python 中的虚拟环境主要有 venv 和 virtualenv 这两个工具,venv 在 python3 中是自带的一个包,可以直接用来创建虚拟环境;virtualenv 是第三方包,需要单独安装。

首先我们需要安装这个 virtualenv 到某个指定的 python 版本中。

这件事情并不是很好弄。

在服务器上,我们可以使用类似 which python3.5 来查看系统的 python3.5 安装在什么目录,使用这种方法,我们可以在服务器上查看每一种版本的 python 的位置,下面是我们跳板机上的 python3 版本列表:

1
2
3
4
5
6
7
8
9
10
user@DataServer:~$ which python3
/usr/bin/python3
user@DataServer:~$ which python3.5
/usr/bin/python3.5
user@DataServer:~$ which python3.6
/usr/bin/python3.6
user@DataServer:~$ which python3.7
/usr/bin/python3.7
user@DataServer:~$ which python3.8
user@DataServer:~$

可以发现,服务器上的 python3 都是安装在 /usr/bin 这个目录下。python3.5python3.7 都有安装,python3.8 则没有。

现在,我想要将 virtualenv 这个包安装给 python3.7 这个版本的 python,该怎么做呢?

直觉上,我们可能觉得服务器上既然存在 python3.5 / python3.6 / python3.7 这种,是不是也有 pip3.5 / pip3.6 / pip3.7 呢?遗憾的是,服务器上并没有,这样就不能直接通过制定 pip 的版本来将 virtualenv 安装到该 pip 对应的 python 中了。

经过一番查找,找到了下面的办法:

1
python3.7 -m pip install virtualenv

安装好 virtualenv 之后,我们可以首先看看这个命令的位置:

1
which virtualenv

接着,我们就可以使用这个安装好的 virtualenv 来新建虚拟环境了。首先切换到自己想要安装的目录,然后执行:

1
virtualenv -p /usr/bin/python3.7 py37env

这条命令将会在当前目录下,新建一个 py37env 的目录,这个目录就是我们的虚拟环境。

-p 参数的目的是后面跟上 python 的完整路径,py37env 是环境名,可以任意指定。

references:

Donate comment here