【原创】Linux pip 使用国内镜像源

概要

1、简介

python 的 pip 工具可以很方便地管理第三方库,平时应该也经常使用  pip 进行第三方库安装,但通常情况下可能在国内的安装速度相对较慢。

本文给出 Ubuntu 下的几个常用的 pip 加速方法,其他 Linux 发行版也是类似的设置方法

2、环境信息

Ubuntu 18.04.5
Python 3.6.9
pip3 20.2.3

正文

1、查看当前默认 index-url

你可以用如下命令来查看你当前环境默认使用的 index-url 即 pip 源地址:

pip3 install --help | grep -A 4 '\--index-url <url>'

示例:

➜  ~ pip3 install --help | grep -A 4 '\--index-url <url>'
  -i, --index-url <url>       Base URL of the Python Package Index (default
                              https://pypi.org/simple). This should point to a
                              repository compliant with PEP 503 (the simple
                              repository API) or a local directory laid out in
                              the same format.

可以看到 pip 默认的 index-url 是 https://pypi.org/simple

2、单次指定 index-url 为国内源

为某次 pip 安装指定一个 index-url,使得本次安装的库及其依赖库都会从指定的 index-url 进行下载。命令如下:

pip install {library_name} -i {index_url}

示例:

(venv) $ pip3 install flask -i https://pypi.douban.com/simple
Looking in indexes: https://pypi.douban.com/simple
Collecting flask
  Downloading https://pypi.doubanio.com/packages/f2/28/2a03252dfb9ebf377f40fba6a7841b47083260bf8bd8e737b0c6952df83f/Flask-1.1.2-py2.py3-none-any.whl (94 kB)
     |████████████████████████████████| 94 kB 2.7 MB/s 
Collecting Werkzeug>=0.15
  Downloading https://pypi.doubanio.com/packages/cc/94/5f7079a0e00bd6863ef8f1da638721e9da21e5bacee597595b318f71d62e/Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
     |████████████████████████████████| 298 kB 13.2 MB/s 
Collecting click>=5.1
  Downloading https://pypi.doubanio.com/packages/d2/3d/fa76db83bf75c4f8d338c2fd15c8d33fdd7ad23a9b5e57eb6c5de26b430e/click-7.1.2-py2.py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 4.7 MB/s 
Collecting itsdangerous>=0.24
  Downloading https://pypi.doubanio.com/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting Jinja2>=2.10.1
  Downloading https://pypi.doubanio.com/packages/30/9e/f663a2aa66a09d838042ae1a2c5659828bb9b41ea3a6efa20a20fd92b121/Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)
     |████████████████████████████████| 125 kB 5.7 MB/s 
Collecting MarkupSafe>=0.23
  Downloading https://pypi.doubanio.com/packages/b2/5f/23e0023be6bb885d00ffbefad2942bc51a620328ee910f64abe5a8d18dd1/MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl (27 kB)
Installing collected packages: Werkzeug, click, itsdangerous, MarkupSafe, Jinja2, flask
Successfully installed Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 flask-1.1.2 itsdangerous-1.1.0

注:

(1) 这种方式只对单次安装生效,不会改变配置,也不会改变默认 index-url。这种方法适合简单使用 pip 或者某些特殊的场景,比如:自己开发的私有库托管在私有的源服务中;或者构建一个 docker 镜像时执行的 pip 依赖安装。

(2) 也可以对 pip install -r requirements.txt 生效,比如 pip install -r requirements.txt -i https://pypi.douban.com/simple

3、配置当前用户的 index-url 【推荐】

如果你想要当前用户始终使用指定的默认 index-url,则更改 pip.conf 中的全局配置是一个方法。

Linux 当前用户的 pip 配置文件分以下几种情况:

(1) 如果当前用户通过 XDG_CONFIG_HOME 环境变量设置了 pip.conf 的位置,则该设置的 pip.conf 配置文件生效。

(2) 如果没有配置 XDG_CONFIG_HOME 环境变量,且 $HOME/.config/pip/pip.conf 文件存在,则该配置文件生效。

(3) 如果以上两种情况均不存在,且 $HOME/.pip/pip.conf 文件存在,则该配置生效。(此方法是较老的方法,虽然官网没宣布废弃,较新版本 pip 不建议)

推荐使用第三种方式,如果没有这个目录和文件,创建一个即可。

$ pwd                                                 
/home/jiangzl
$ 
$ mkdir -p ~/.config/pip 
$ vim ~/.config/pip/pip.conf

添加内容如下

[global] 
timeout = 60
index-url = https://pypi.douban.com/simple 
[install] 
find-links = https://pypi.douban.com

保存退出即可。

注:

(1) 这种方法配置的 pip.conf 只对当前用户的 pip 环境生效。

(2) 这种方法配置的 pip.conf 对当前用户下创建的所有虚拟环境也都生效(如果虚拟环境配置了单独的 pip.conf,则虚拟环境以 pip.conf 为准)

(3) 如果你只是设置 index-url,不需要其他设置,则可以使用如下命令设置,不过该方法要求 pip3 版本要 >= 10.0.0。

 pip3 install --upgrade pip -i https://pypi.douban.com/simple
pip3 config set global.index-url {index-url}

示例:

$ pip3 config set global.index-url https://pypi.douban.com/simple
Writing to /home/jiangzl/.config/pip/pip.conf

可以看到,当前最新版本 pip3 默认使用的用户配置文件位置是 $HOME/.config/pip/pip.conf,所以也推荐使用该位置的配置文件。当然其他配置项也可以通过这种方式配置,但前提是必须知道配置项的层级关系,可以参考官方文档进行配置。

4、配置某个虚拟环境的 pip.conf

如果只想对某个虚拟环境的 pip 源,则只需要在虚拟环境的根目录下创建 pip.conf 文件并添加 index-url 配置。此方法与上面的配置相同,不再赘述。

或者在激活虚拟环境的情况下执行如下命令

pip3 config set global.index-url {index-url}

示例

$ pwd                                                 
/home/jiangzl/Workspace/test-pip
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ 
(venv) $ pip3 config set global.index-url https://pypi.douban.com/simple
Writing to /home/jiangzl/Workspace/test-pip/venv/pip.conf

从示例可以看出,默认将配置信息写到了虚拟环境的根目录下的 pip.conf 文件中。

5、配置所有用户的 pip.conf

配置所有用户的 pip.conf 与配置当前用户的 pip.conf 基本一致,过程不再赘述,但有几点需要提一下。

(1) 如果全局 XDG_CONFIG_DIRS 环境变量设置了 pip.conf 的位置,则该设置的 pip.conf 配置文件生效。

(2) 如果没有配置全局 XDG_CONFIG_DIRS 环境变量,且 /etc/pip.conf 文件存在,则该配置文件生效。

vim /etc/pip.conf

添加如下内容:

[global] 
timeout = 60
index-url = https://pypi.douban.com/simple 
[install] 
find-links = https://pypi.douban.com

验证总结

1、验证配置

验证配置是否生效的方法很简单,第一种执行如下命令,查看默认的 index-url:

➜  test-pip pip3 install --help | grep -A 4 '\--index-url <url>'
  -i, --index-url <url>       Base URL of the Python Package Index (default
                              https://pypi.douban.com/simple). This should
                              point to a repository compliant with PEP 503
                              (the simple repository API) or a local directory
                              laid out in the same format.

第二种更直接了,尝试使用 pip 安装一个第三方库,如 flask 可以看到下载的 URL 以及速度,如果与你设置相符,就配置成功了。

pip3 install flask

示例:


2、推荐方法

(1) 推荐使用为当前用户配置 pip.conf 的方式。

(2) 如果配置全局 index-url,则使用清华源或者豆瓣源都可以,如果是单次使用,则非常推荐使用豆瓣源了,原因很简单,豆瓣源的链接地址够短非常方便记忆,而清华源的域名较长且不好记忆。至于速度谁更快,我就没测试了,肯定都比连美国快…

附录

参考:

1、pip configuration ref:

https://pip.pypa.io/en/stable/user_guide/#configuration

2、pip 官网文档

https://pip.pypa.io/en/stable/user_guide

3、pip 清华源文档帮助中心

https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

4、pip 常用国内源

https://pypi.douban.com/simple    # 豆瓣源
https://pypi.tuna.tsinghua.edu.cn/simple    # 清华源
https://mirrors.aliyun.com/pypi/simple    # 阿里源

注:非常建议都使用 https 的方式,如果使用 http 配置,则需要设置 trust_host,不推荐也未说明。还有 URL 结尾都有一个 simple 哦,一定不要忘 了,这是 pypi 官网上规定的… 具体可参考 pip 官网文档。

You may also like...

发表评论

电子邮件地址不会被公开。